我是mongo db的新手。我有一个特定的问题,我只有在该文档中的字段不相同时才更新行。以下是示例
让我们考虑以下数据与卖家& ASIN作为独特的领域。
{ "_id" : ObjectId("572dc897bde92c7907ffaf71"), "seller" : "amazon", "ASIN" : "XYZ", "price" : 46, "lastUpdatedate" : ISODate("2016-05-07T10:59:11.165Z") }
现在我有两个任务中的一个。
仅在卖家和&amp ;; ASIN是独一无二的
仅当价格不相同时才更新上述ID。示例如果我向同一卖家发送电话& ASIN与价格:47然后它应该突出上面的行,如果价格是46,那么它不应该做任何改变。 理想情况下,如果价格保持不变,字段lastUpdatedate应保持相同。
在此之后,我将仅查询lastupdatedate已更改的行<昨天将数据上传到其他模块。这将大大减少上传到其他模块的数据。
请帮忙。
答案 0 :(得分:0)
答案 1 :(得分:0)
MongoDB的update
命令有一个可选的upsert
参数......
...如果设置为true,则在没有文档与查询条件匹配时创建新文档。
你可以这样使用它:
db.yourCollection.update({ seller: 'amazon', ASIN: 'XYZ'}, { ...your new document... }, { upsert: true })
如果找不到卖方为'amazon'且ASIN为'XYZ'的现有文档,这将告诉MongoDB插入新文档 。如果确实找到现有文档,它将用新文档替换它,但据我了解您的情况,这是不相关的。
只有在新价格字段高于现有价格字段时才更新价格字段,您可以使用$max
运算符...
...如果指定的值大于字段的当前值,则将字段的值更新为指定值。
您可以这样使用它:
db.yourCollection.update({ seller: 'amazon', ASIN: 'XYZ'}, { $max: {price: newPrice} }, { upsert: true })
关于lastUpdatedate字段 - 我想不出在同一个更新操作中有条件地更新它的方法。我认为您需要获取更新操作的结果以确定价格是否已更新,如果是,请更新lastUpdatedate。
答案 2 :(得分:0)
$ne: {"price":new_price}
因此,如果价格相同,它将永远不会插入(插入)新文档,也不会更新现有文档。