Cosmos DB与MongoDB上的不同upsert行为

时间:2017-06-13 20:30:57

标签: mongodb azure azure-cosmosdb

我遇到了Cosmos DB的问题,其中{upsert: true}$setOnInsert的查询行为每次都会应用 insert 值而不管如果操作是插入或更新。

针对Cosmos DB和MongoDB运行时,以下示例查询的结果显示defaultQty的最终值存在差异。

db.products.remove({})
// WriteResult({ "nRemoved" : 1 })

db.products.insert({ _id: 1, item: "apple", price: 0.05, defaultQty: 50})
// WriteResult({ "nInserted" : 1 })

db.products.find({})
// { "_id" : 1, "item" : "apple", "price" : 0.05, "defaultQty" : 50 }

sleep(100)
db.products.update(
    { _id: 1 },
    { $set: { price: 0.10 }, $setOnInsert: { defaultQty: 100 }},
    { upsert: true }
)
// WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.products.find({})
// { "_id" : 1, "item" : "apple", "price" : 0.1, "defaultQty" : 100 }

以下是Studio 3T中comparison results并排的屏幕截图。

有没有人经历过这个?

谢谢!

2 个答案:

答案 0 :(得分:1)

此问题现已修复,等待部署。您可以在此处跟踪进度https://feedback.azure.com/forums/599059-azure-cosmos-db-mongodb-api/suggestions/20017141-bug-fix-during-upsert-operation-setoninsert-is-b

我们将在部署完成后发布更新。

谢谢!

答案 1 :(得分:0)

是的,这是一个已知问题,很快就会在Azure Cosmos DB中修复。