Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb findOneAndUpdate仅获取更新字段_Javascript_Mongodb_Node Mongodb Native - Fatal编程技术网

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 }
)