我正在使用node和mongodb并且从我的集合中的数组中删除子文档时遇到问题,我似乎无法弄明白。
来自我的' cardHolders'的示例文档集合看起来像(为了简洁起见剥离了其他字段):
{
"_id" : ObjectId("51ee899ec15d5aaff39d3352"),
"cards" : [
{
"rfid_id" : ObjectId("51ee899ec15d5aaff39d335a")
}
]
}
我尝试做的是找到所有cardHolder文档,这些文档在卡片数组中有一个带有rfid_id值的子文档。
我已经尝试了mongo命令:
db.cardholders.update({},
{$pull:{ "cards": {"rfid_id": ObjectId("51ee899ec15d5aaff39d335a")}}},
false, false)
虽然我没有收到任何语法错误,但我的收藏中没有任何文件受到影响 - 非常感谢您对此事的任何帮助!
使用完整的文档详细信息进行编辑:
{
"_id" : ObjectId("51ee899ec15d5aaff39d3353"),
"first" : "first",
"last" : "last",
"email" : "email",
"phone" : "555 555 5555",
"userRole" : "su",
"cards" : [
{
"rfid_id" : ObjectId("51ee899ec15d5aaff39d3359")
}
],
"zones" : [
{
"zone_id" : ObjectId("51ee899ec15d5aaff39d3357")
}
]
}
答案 0 :(得分:3)
你的例子很好用:
db.so.drop();
db.so.insert(
{
"_id" : ObjectId("51ee899ec15d5aaff39d3353"),
"first" : "first",
"last" : "last",
"email" : "email",
"phone" : "555 555 5555",
"userRole" : "su",
"cards" : [
{
"rfid_id" : ObjectId("51ee899ec15d5aaff39d3359")
}
],
"zones" : [
{
"zone_id" : ObjectId("51ee899ec15d5aaff39d3357")
}
]
});
db.so.update({}, {$pull:{ "cards": {"rfid_id": ObjectId("51ee899ec15d5aaff39d3359")}}}, false, false)
db.so.find().pretty();
输出:
{
"_id" : ObjectId("51ee899ec15d5aaff39d3353"),
"cards" : [ ],
"email" : "email",
"first" : "first",
"last" : "last",
"phone" : "555 555 5555",
"userRole" : "su",
"zones" : [
{
"zone_id" : ObjectId("51ee899ec15d5aaff39d3357")
}
]
}
虽然我确实需要略微改变拉动的ObjectID,因为它最初在文档的简单版本和完整版本之间使用了不同的字符串。