我有一个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
如何删除在阵列中同时拥有这两个用户的所有聊天记录?
答案 0 :(得分:1)
使用$ all运算符而不是$ elemMatch。
$所有
$ all运算符选择字段值为包含所有指定元素的数组的文档。要指定$ all表达式,请使用以下原型:
{ <field>: { $all: [ <value1> , <value2> ... ] } }