Cosmos DB 与 MongoDB 上的不同更新插入行为
Different upsert behavior on Cosmos DB vs MongoDB
我 运行 遇到 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 }
这是 comparison results Studio 3T 中并排的屏幕截图。
有人遇到过这种情况吗?
谢谢!
是的,这是一个已知问题,很快就会在 Azure Cosmos DB 中修复。
此问题现已修复,等待部署。您可以在此处跟踪进度 https://feedback.azure.com/forums/599059-azure-cosmos-db-mongodb-api/suggestions/20017141-bug-fix-during-upsert-operation-setoninsert-is-b
部署完成后我们将post更新。
谢谢!
我 运行 遇到 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 }
这是 comparison results Studio 3T 中并排的屏幕截图。
有人遇到过这种情况吗?
谢谢!
是的,这是一个已知问题,很快就会在 Azure Cosmos DB 中修复。
此问题现已修复,等待部署。您可以在此处跟踪进度 https://feedback.azure.com/forums/599059-azure-cosmos-db-mongodb-api/suggestions/20017141-bug-fix-during-upsert-operation-setoninsert-is-b
部署完成后我们将post更新。
谢谢!