與$或條件查詢的子文件我有一個順序的文件看起來像這樣更新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