2015-02-10 100 views
2

我在我的Mongodb中嵌入了一组推文,并且每条推文都有一个tweetID(不要与MongoDB分配的ID混淆)。通过与嵌套阵列中的不同阵列进行匹配来移除嵌套阵列中的元素

{ 
"_id": { 
    "$oid": "54d95cb062917897ad26c5e5" 
}, 
"name": "foo", 
"tweets": [ 
    { 
     "tweetID": "1234", 
     "text": "bla bla bla" 
    }, 
    { 
     "tweetID": "4321", 
     "text": "bla bla bla", 
    } 

... and so on 

现在在我的应用程序中,我有另一个数组,应该被删除的tweetID。

var tweetsToBeDeleted = [ "1234", "4321" ]; 

,我试图让猫鼬有这样做的:

ChannelsModel.update({ }, 
         { $pull: { tweets: { $elemMatch: { tweetID: tweetsToBeDeleted } } } }, 
         { multi: true }, 
         function (err) { 
         console.log("err - " + err); 
         } 
); 

但是,当我尝试运行此,没有被删除。错误回调将被执行,但errnull

任何想法?

在此先感谢!

回答

3

使用$in当匹配多个值的字段:

var tweetsToBeDeleted = [ "1234", "4321" ]; 
ChannelsModel.update({ }, 
         { $pull: { tweets: { tweetID: { $in: tweetsToBeDeleted } } } }, 
         { multi: true }, 
         function (err) { 
         console.log("err - " + err); 
         } 
);