我试图运行一个更新命令,该命令在所有文档的数组字段中找到一个对象,然后从所有文档的数组字段中拉出对象。我尝试了以下命令,这些命令不返回任何文档(nMatched:0)。
db.users.update({"likedQuizzes.quiz": { $elemMatch: quizObj}},{$pull: {"likedQuizzes.quiz": quizObj }});
db.users.update({"likedQuizzes": { $elemMatch: quizObj}},{$pull: {"likedQuizzes": quizObj }});
在上述情况下 quizObj = {"title" : "2 Purple", "author" : "purple-tester1"}
这是来自“用户”集合的样本文档:
{
"_id" : ObjectId("581114330de9ac0c1445cdd6"),
"user" : "test-username1",
"likedQuizzes" : [
{
"quiz" : {
"title" : "2 Purple",
"author" : "purple-tester1"
},
"date" : ISODate("2016-10-26T20:39:02.695Z")
},
{
"quiz" : {
"title" : "1 Purple",
"author" : "purple-tester1"
},
"date" : ISODate("2016-10-26T20:39:12.374Z")
},
{
"quiz" : {
"title" : "4 Green",
"author" : "green-tester1"
},
"date" : ISODate("2016-10-26T20:39:25.304Z")
},
{
"quiz" : {
"title" : "3 Green",
"author" : "green-tester1"
},
"date" : ISODate("2016-10-26T20:39:37.326Z")
},
{
"quiz" : {
"title" : "2 Green",
"author" : "green-tester1"
},
"date" : ISODate("2016-10-26T20:40:12.964Z")
}
]
}
换句话说,我只是尝试查找测验是否位于用户的“ likedQuizzes”数组中,如果是,则将其从该数组中删除(以及喜欢的“日期”)。
经过一番研究后,看来这不可能实现,但是我还是想问一下,因为我认为我的模式可能与研究中的示例有所不同。在此先感谢您提供任何指导。
您可以将文档重组为以下结构:
{
"_id" : ObjectId("581114330de9ac0c1445cdd6"),
"user" : "test-username1",
"likedQuizzes" : [
{
"title" : "2 Purple",
"author" : "purple-tester1",
"date" : ISODate("2016-10-26T20:39:02.695Z")
},
{
"title" : "1 Purple",
"author" : "purple-tester1",
"date" : ISODate("2016-10-26T20:39:12.374Z")
},
{
"title" : "4 Green",
"author" : "green-tester1",
"date" : ISODate("2016-10-26T20:39:25.304Z")
},
{
"title" : "3 Green",
"author" : "green-tester1",
"date" : ISODate("2016-10-26T20:39:37.326Z")
},
{
"title" : "2 Green",
"author" : "green-tester1",
"date" : ISODate("2016-10-26T20:40:12.964Z")
}
]
}
之后...如果您运行以下命令:
db.users.update(
{
"likedQuizzes": {
$elemMatch: {
"title" : "2 Purple",
"author" : "purple-tester1"
}
}
},
{
$pull: {
"likedQuizzes": {
"title": "2 Purple",
"author": "purple-tester1"
}
}
}
);
您的$ pull现在可以使用了。$ pull与$ elemMatch的搭配似乎不太好
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句