Javascript mongodb findOneAndUpdate仅获取更新字段
我正在使用Javascript mongodb findOneAndUpdate仅获取更新字段,javascript,mongodb,node-mongodb-native,Javascript,Mongodb,Node Mongodb Native,我正在使用mongodb插入和更新某些集合中的一些文档。当我更新文档时,我只想得到修改过的字段。通过使用returnOriginal选项进行更新,我可以获得完整的新文档(包括修改的字段),但它提供了所有属性 从: returnOriginal |可选|如果为false,则返回更新的文档 而不是原来的。默认值为true 我的代码是: let result = await db.myCollection.findOneAndUpdate( {_id: ObjectId('5a2451
mongodb
插入和更新某些集合中的一些文档。当我更新文档时,我只想得到修改过的字段。通过使用returnOriginal
选项进行更新,我可以获得完整的新文档(包括修改的字段),但它提供了所有属性
从:
returnOriginal |可选|如果为false,则返回更新的文档
而不是原来的。默认值为true
我的代码是:
let result = await db.myCollection.findOneAndUpdate(
{_id: ObjectId('5a2451399054bf000453c332')},
data,
{returnOriginal: true}
);
其中,数据
可以是一个字段,也可以是多个字段,例如:
let data = {field1: 'newValue1'};
或
我只想得到那些字段,但是更新的结果是给我整个对象,包括_id属性和所有其他属性,即使它们没有被修改
我正在寻找的是一种简单的方法(mongodb函数或属性将是理想的)只获取修改的字段,如果有这种方法的话,而不是比较两个对象(前后)
使用:
你可以这样做 为要传递的关键帧创建一个键值对,其值等于1,以便在投影中使用
var keys = {}
let data = { field1: 'newValue1', field2: 'newValue2' }
function setUsers(data) {
for (var k in data) {
if (data.hasOwnProperty(k)) {
keys[k] = 1
}
}
return keys
}
const projection = setUsers(data)
然后在查询中使用投影来限制字段
db.myCollection.findOneAndUpdate(
{ _id: ObjectId('5a2451399054bf000453c332') },
data,
{ returnOriginal: true, projection }
)
MongoDB没有这样的函数不幸的是,您需要使用像lodash这样的实用程序库进行比较,或者编写您自己的自定义函数来检查前后文档。这是我目前的方法,但希望MongoDB有一个本机选项或函数来实现这一点。这个解决方案唯一的问题是,它对嵌套属性、对象或数组没有帮助,但当然这是一个我以前已经解决过的解决方案。非常感谢。chridam是对的mongodb现在没有可用的功能。
var keys = {}
let data = { field1: 'newValue1', field2: 'newValue2' }
function setUsers(data) {
for (var k in data) {
if (data.hasOwnProperty(k)) {
keys[k] = 1
}
}
return keys
}
const projection = setUsers(data)
db.myCollection.findOneAndUpdate(
{ _id: ObjectId('5a2451399054bf000453c332') },
data,
{ returnOriginal: true, projection }
)