Minimongo嵌套查询嵌入文档

问题描述:

我想在MongoDB中搜索嵌入文档并只返回我正在寻找的内容。 这里的文件:Minimongo嵌套查询嵌入文档

"_id" : "yH8HmCPz6H6E8Hinq", 
"between" : [ 
    "4bgdLrztpqgwAkZP4", 
    "9jZhXHjAkoY7mmX7B" 
], 
"messages" : [ 
    { 
     "content" : "fdsqf", 
     "user" : "4bgdLrztpqgwAkZP4", 
     "created_at" : ISODate("2016-11-17T23:13:59.659Z"), 
     "isSeen" : false, 
     "sender" : "John doe", 
     "receiver" : "Elen doe" 
    }, 
    { 
     "content" : "test", 
     "user" : "9jZhXHjAkoY7mmX7B", 
     "created_at" : ISODate("2016-11-20T11:42:42.893Z"), 
     "isSeen" : false, 
     "sender" : "Elen doe", 
     "receiver" : "John doe" 
    } 
] 

所有我想做的是有“messages.isSeen”等于虚假和接收器不Meteor.user()的用户名。

最后如何更新该字段成为true。

希望有人能帮助!提前致谢 !

+0

我不完全确定,但does minimongo支持$匹配和$项目? – blueren

+0

你可以看看[这个](http://*.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection)回答 – blueren

+0

问题是我需要通过id找到对话,然后获取接收者是“John doe”的消息,然后更新该字段。我尝试了一切,但没有任何工作! –

您需要包括在更新查询的_id$set

let id = "yH8HmCPz6H6E8Hinq"; 
let username = Meteor.user().username; 
let query = { _id: id, messages: { $elemMatch: { isSeen: false, receiver: { $ne: username }}}}; 
Chat.update(query,{ $set: { "messages.$.isSeen": true }}); 
+0

不工作!我真的被困在这! –

+0

这里是控制台说的: MongoError:不能使用部分(messages.isSeen的消息)遍历元素... –

+0

我真的很抱歉!它的工作就像一个魅力!先生非常感谢您 !谢谢 ! –

你需要的东西,如:

Chat.update({ 
    'messages.isSeen': false,   // isSeen is false 
    'messages.receiver': {    // Receiver is 
    $ne: Meteor.user().username  // not equal to Meteor.user().username 
    } 
}, { 
    'messages.$isSeen': true   // Set isSeen to true 
}); 
+0

我需要先找到与ID的对话!因为这是x和y之间的独特对话!并找到谁收到该消息,然后更新字段isSeen。 –

+0

我认为只要在查询中添加一个_id'字段就可以完成这项工作。你不觉得吗? – tbking

+0

不工作,我已经尝试了一切!它真的不起作用!这就是为什么我在这里!有点奇怪,因为当我添加其他东西比_id,它会返回一个空的对象! –