如何匹配对象内的标准?

时间:2015-10-08 13:31:56

标签: mongodb meteor

我有一个Meteor聊天应用程序,并尝试在用户删除友谊时删除所有聊天。目前,我正在使用它:

Friends.before.remove(function (userId, doc) {
// Delete Chats


Chats.find({users: {$elemMatch: {id: doc.user1, id: doc.user2}}}).forEach(function (docx) {

    Chats.remove(docx._id);
})
});

此处出现问题:此代码删除用户的所有聊天记录,而不仅删除匹配正确的聊天记录。我的聊天文档有这样的结构:

聊天

created_at: Date
users: [ {id: 'abc'}, {id: 'def'}]
last_message: Date

如何删除在阵列中同时拥有这两个用户的所有聊天记录?

1 个答案:

答案 0 :(得分:1)

使用$ all运算符而不是$ elemMatch。

  

$所有

     

$ all运算符选择字段值为包含所有指定元素的数组的文档。要指定$ all表达式,请使用以下原型:

{ <field>: { $all: [ <value1> , <value2> ... ] } }

See MongoDB Docs.