与$或条件查询的子文件我有一个顺序的文件看起来像这样更新MongoDB中
{
"_id" : ObjectId("4f70ba6dfb59c87f6b07a1ad"),
"state" : "CART", "storeId" : "1", "userId" : "johndoe",
"orderItems" : [
{
"productId" : "169",
"offerId" : "112233",
"sku" : "product-sku-1",
"name" : "Product Awesome A",
"quantity" : 1,
"retailPrice" : 495,
"salePrice" : 395
},
{
"productId" : "170",
"offerId" : "112234",
"sku" : "product-sku-2",
"name" : "Product Awesome B",
"quantity" : 1,
"retailPrice" : 595,
"salePrice" : 495
}
]
}
问题:我想找到一个具有任何的productId或SKU与价值产品sku-的OrderItem的1,设置数量为2
所以,我尝试以下
db.order.update(
{
"userId":"johndoe", "state":"CART",
$or: [
{"orderItems.productId":"product-sku-1"},
{"orderItems.sku":"product-sku-1"}
]
},
{
$set : {"orderItems.$.quantity":2}
}
)
这给了我一个错误
"can't append to array using string field name [$]"
如果我删除的只是一个像下面的子文件的领域或状况和查询,如设置为2
db.order.update(
{
"userId":"johndoe", "state":"CART",
"orderItems.sku":"product-sku-1"
},
{
$set : {"orderItems.$.quantity":2}
}
)
我的应用程序接收或者SKU或作为productId参数的数量预计一切工作正常标识符字段。在查询时我不知道它是sku还是productId。所以,我需要能够查询子文档中的任何一个字段并更新数量。
请注意,我需要以原子方式完成更新。我真的不想一个接一个地做两个更新。
我在这里错过了什么吗?有没有另一种优雅的方式呢?
我发现后仔细阅读点符号和子对象之间的差异,答案http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+ into + Objects%29 – VikramG 2012-03-29 20:33:28