问题:Cosmos DB 与 MongoDB 上的不同 upsert 行为

我遇到了 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 中并排的比较结果的屏幕截图。

有没有人经历过这个?

谢谢!

解答

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

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐