鉴于 marketlist 集合中的以下文档:
{
"_id": OjectId(...),
"user": 'myName',
"marketList: [
{
"marketName": "Ralphs",
"shoppingList: [
{ itemName: "cookies", isCrossed: false },
{ itemName: "bananas", isCrossed: true }
]
}
]
}
你好吗:
1)$拉出市场的市场清单?
以下内容与文档匹配,但不会修改任何内容:
db.marketlist.update(
{
user: 'myName'
},
{ $pull: { marketList: {marketName: 'Ralphs'}}})
2)$将一个项目从shoppingList中拉出(不将整个市场文档拉出来)
以下内容无效,甚至在命令行上都没有返回消息
db.marketlist.update(
{
user: 'myName'
},
{$pull: {marketList: {shoppingList: { itemName: 'cookies'}}}})
根据关于$ pull运算符的mongoDB文档,#1中提出的解决方案应该可以胜任。
至于#2,我完全迷失了。在任何一种情况下对我所做错的任何见解都非常感激。
答案 0 :(得分:0)
你可以做这样的事情
db.getCollection('users').update(
{
user: 'myName'
},
{$pull: {'marketList.0.shoppingList': { "itemName": 'cookies'}}})
这会将一个项目从shoppingList中拉出,并将字段itemName与我们指定的值匹配(" cookies"在这种情况下)
答案 1 :(得分:0)
由于mongodb的位置运算符不能代表多于1个匹配元素,因此需要重新构建以不嵌套数组的方式存储数据的方式。一种可能的解决方案是嵌套对象:
{
"_id": OjectId(...),
"user": 'myName',
"marketList: [
{
"marketName": "Ralphs",
"shoppingList:{
"cookie": { itemName: "cookies", isCrossed: false },
"bananas": { itemName: "bananas", isCrossed: true }
}
}
]
}