我是meteor / mongo / js的新手,我正迷失在JSON数组中并引用它们。基于another SO answer(以及文档),我认为我很接近......
Orders集合中的文档,该文档具有嵌套数组。
Order -> orderLines -> lineItems:
示例文档:
{
"_id" : "27tGpRtMWYqPpFkDN",
"orderLines" : [
{
"lineId" : 1,
"name" : "Cheese & Pickle",
"instructions" : "",
"lineItems" : [
{
"name" : "Cheddar Cheese",
"quantity" : 1
},
{
"name" : "Branston Pickle",
"quantity" : 1
},
{
"name" : "Focaccia Roll",
"quantity" : 1
}
]
}
]
}
我想从meteor / mongo shell做什么:
这似乎挂了......
meteor:PRIMARY> db.orders.update({_id:"27tGpRtMWYqPpFkDN","orderLines.lineId":"1", {$set: {"orderLines.$.instructions":"foo"}})
...
这与查询
中的标识符不同meteor:PRIMARY> db.orders.update({_id:"27tGpRtMWYqPpFkDN", "orderLines.lineId":"1"}, {$push:{"orderLines.$.lineItems":" { "name" : "butter", "quantity" : 1}"}});
2015-10-27T16:09:54.489+0100 SyntaxError: Unexpected identifier
答案 0 :(得分:0)
$push
向数组添加新元素。您只是尝试在数组元素中设置特定键的值。
尝试:
db.orders.update({ _id: "27tGpRtMWYqPpFkDN", "orderLines.lineId": 1},
{ $set: { "orderlines.$.instructions": "foo" }})
答案 1 :(得分:0)
感谢大家的评论...但我找到了一些答案,张贴供参考
第1项 - 对数组中的值使用$ set
由于在查询结尾处有两个拼写错误,一个丢失关闭},第二个在查询中为itemId引用了值“1”,这是失败的。
这有效:
db.orders.update({_id:"27tGpRtMWYqPpFkDN", orderLines.lineId":1},
{$set: {"orderLines.$.instructions":"foo"}})
我也意识到,当我说“它似乎挂起”时,cli正在等待一个有效的声明,因此提示缺少}或者)!
第2项 - 使用$ push将数据添加到数组 - 嵌套2个级别
由于引用了数组数据
,这是失败的db.orders.update({_id:"27tGpRtMWYqPpFkDN", "orderLines.lineId":1 },
{$push:{"orderLines.$.lineItems": { "name" : "butter", "quantity" : 1} }})
嵌套数组:可以使用$ position运算符
我接下来要做的是在第二级数组中使用$ set,这需要使用$ position运算符两次:
db.orders.update({"orderLines.lineId":1, lineItems.name:"Cheddar Cheese"},
{$set: {"orderLines.$.lineItems.$.quantity": 2}})
这会引发错误:
Too many positional (i.e. '$') elements found in path
There is an open MongoDB enhancement request for this但它自2010年开始