Minimongo嵌套查询嵌入文档

时间:2016-11-20 16:05:17

标签: mongodb meteor real-time minimongo

我想在mongodb中搜索嵌入文档并仅返回我正在寻找的内容。 这是文件:

"_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()。用户名。

最后如何更新该字段以使其成为现实。

希望有人可以帮忙!提前致谢 !

2 个答案:

答案 0 :(得分: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
});

答案 1 :(得分:0)

您需要在查询中加入_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 }});