从Mongo中的嵌入数组中按值拉取项目

raf*_*ian 4 arrays mongodb

我想从嵌入式数组中提取特定项目...假设以下mongo文档....

db.test.find()

{
  id:1,
  comments : 
   [
     { cid: 1 },
     { cid: 2 },
     { cid: 3 },
     { cid: 4 },
     { cid: 5 }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想从comments数组中删除一个项目cid,而不是按位置.我已经尝试了所有这些,但它们似乎都不起作用.我尝试过使用点符号,但这似乎没有任何效果.我尝试了如何从数组中删除第n个元素的最后一篇帖子建议,但没有运气......

db.test.update({ 'comments.cid' : 5}, {"$pull" :{"comments":{"cid":"3"}}}    )
db.test.update(  {id: 1}, {"$pull" : {"comments" : { "cid" : "3"}}},false,false)
db.test.update(  {id: 1}, {"$pull" :{"comments.cid" :3}})
Run Code Online (Sandbox Code Playgroud)

Ale*_*tic 10

这应该工作:

db.test.update(  {id: 1}, {$pull :{comments: {cid :3}}})
Run Code Online (Sandbox Code Playgroud)

另外,在你的文档中,你有:id:1最后没有逗号,它应该是:

id:1, 
Run Code Online (Sandbox Code Playgroud)


raf*_*ian 2

这些也有效...

db.test.update({comments:{cid:4} }, 
                    {$pull:{comments:{cid:4}},  
                      $inc:{commentCount: -1}})

db.test.update({"comments.cid" : 17}, 
                     {$pull:{ comments:{cid: 17}}, 
                      $inc:{commentCount:-1}})
Run Code Online (Sandbox Code Playgroud)