mongodb findOneAndUpdate 只获取更新的字段
mongodb findOneAndUpdate get only updated fields
我正在使用 mongodb
插入和更新某些集合中的一些文档。当我更新文档时,我只想获取修改后的字段。我可以通过使用 returnOriginal
更新选项获得完整的新文档(包括修改的字段),但它给了我所有的属性。
来自docs:
returnOriginal | optional | When false, returns the updated document
rather than the original. The default is true
我的代码是:
let result = await db.myCollection.findOneAndUpdate(
{_id: ObjectId('5a2451399054bf000453c332')},
data,
{returnOriginal: true}
);
其中data
可以是一个字段,也可以是多个字段,例如:
let data = {field1: 'newValue1'};
或
let data = {field1: 'newValue1', field2: 'newValue2'};
我只想获取这些字段,但更新的结果是给我整个对象,包括 _id 属性 和所有其他对象,即使它们没有被修改。
我正在寻找的是一种简单的方法(mongodb 函数或 属性 是理想的)仅获取修改后的字段,如果有这样的方法,而不是比较两个对象(之前和之后)。
"mongodb": "^3.1.6"
你可以这样做
为要传递的键创建一个键值对,其值等于 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
插入和更新某些集合中的一些文档。当我更新文档时,我只想获取修改后的字段。我可以通过使用 returnOriginal
更新选项获得完整的新文档(包括修改的字段),但它给了我所有的属性。
来自docs:
returnOriginal | optional | When false, returns the updated document rather than the original. The default is true
我的代码是:
let result = await db.myCollection.findOneAndUpdate(
{_id: ObjectId('5a2451399054bf000453c332')},
data,
{returnOriginal: true}
);
其中data
可以是一个字段,也可以是多个字段,例如:
let data = {field1: 'newValue1'};
或
let data = {field1: 'newValue1', field2: 'newValue2'};
我只想获取这些字段,但更新的结果是给我整个对象,包括 _id 属性 和所有其他对象,即使它们没有被修改。
我正在寻找的是一种简单的方法(mongodb 函数或 属性 是理想的)仅获取修改后的字段,如果有这样的方法,而不是比较两个对象(之前和之后)。
"mongodb": "^3.1.6"
你可以这样做
为要传递的键创建一个键值对,其值等于 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 }
)