有没有办法将文档上的散列字段与 MongoDB 中 upsert 上的新散列合并?
Is there a way to merge a hash field on a document with a new hash on upsert in MongoDB?
假设我有一个 MongoDB 文档,其字段 values
包含散列 {a: 1, b: 2, c: 3}
。然后,我继续在 values: {c: 4, d: 5}
.
位置更新此文档的新版本
我想找到的是一种让 Mongo 合并散列 Mongo 端的方法,而无需先下载文档的先前版本。 IE。 upsert 后生成的文档应该有 values: {a: 1, b: 2, c: 4, d: 5}
.
目前可以在 RethinkDB 中通过提供处理 old_doc + new_doc 合并的自定义冲突解决 lambda 函数来执行此操作。 ( https://www.rethinkdb.com/api/ruby/insert/ )
是否可以在 Mongo 中复制它?
您可以将 findOneAndUpdate 与 $set 运算符一起使用。所以你会这样写你的查询
db.<collection_name>.findOneAndUpdate(
{_id: <id of the doc>},
{$set: {"values.c": 4, "values.d": 5}})
这是我测试过的例子
db.users.findOneAndUpdate(
{_id: ObjectId("591cd8641c02e094596479ea")},
{$set: {"values.c": 4, "values.d": 5}})
假设我有一个 MongoDB 文档,其字段 values
包含散列 {a: 1, b: 2, c: 3}
。然后,我继续在 values: {c: 4, d: 5}
.
我想找到的是一种让 Mongo 合并散列 Mongo 端的方法,而无需先下载文档的先前版本。 IE。 upsert 后生成的文档应该有 values: {a: 1, b: 2, c: 4, d: 5}
.
目前可以在 RethinkDB 中通过提供处理 old_doc + new_doc 合并的自定义冲突解决 lambda 函数来执行此操作。 ( https://www.rethinkdb.com/api/ruby/insert/ )
是否可以在 Mongo 中复制它?
您可以将 findOneAndUpdate 与 $set 运算符一起使用。所以你会这样写你的查询
db.<collection_name>.findOneAndUpdate(
{_id: <id of the doc>},
{$set: {"values.c": 4, "values.d": 5}})
这是我测试过的例子
db.users.findOneAndUpdate(
{_id: ObjectId("591cd8641c02e094596479ea")},
{$set: {"values.c": 4, "values.d": 5}})