gpt4 book ai didi

node.js - MongoDb Node.js 驱动程序 - 没有给定字段的 findOneAndUpdate() 行为

转载 作者:可可西里 更新时间:2023-11-01 09:29:30 25 4
gpt4 key购买 nike

我注意到 mongodb node.js 驱动程序有一个奇怪的行为 findOneAndUpate() ...

我错误地只给了它一个 objectId 字符串....认为它会默认搜索文档的 _id 字段....所以,当我使用

User.prototype.updatePetArray = function(user, petElement) {
return this.collection.findOneAndUpdate(user,
{ $push: { pets: petElement } },
{ returnOriginal: false,
maxTimeMS: QUERY_TIME});
}

它拉取并修改了这个文档,根本没有这个编号:

{ "_id" : ObjectId("56d4e2a381c9c28b3056f792"), "username" : "bob123", "location" : "AT", ...}

56d4d35881c9c28b3056f78a不在文档中,为什么要修改这个文档?

最佳答案

在我用一个不存在的 ObjectID 按照你的代码测试它之后,

  var col = db.collection('users');
col.findOneAndUpdate('56cd129222222', {fname: 'Daved'}, function(err, r) {
if (err)
console.log(err);
else
console.log(r);
db.close();
});

因此,集合中的第一个文档被更改。

根据这个doc

findOneAndUpdate(filter, update, options, callback)

filter: Specify an empty document { } to update the first document returned in the collection.

所以我认为这个不存在的 ObjectId 被认为与 {}

具有相同的行为

查看findAndModify的源代码后,最终,

  // Execute the command
self.s.db.command(queryObject

被调用,queryObject

var queryObject = {
'findandmodify': self.s.name
, 'query': query
};

所以我在 mongo shell 中使用不存在的 ObjectId 测试 runCommand,如下所示,结果返回了第一个文档。

> db.users.runCommand({findandmodify: 'users', query: '123ddae344', update: true
})
{
"lastErrorObject" : {
"updatedExisting" : true,
"n" : 1
},
"value" : {
"_id" : ObjectId("56c687275d81735019263d1f"),
"fname" : "Daved"
},
"ok" : 1
}

关于node.js - MongoDb Node.js 驱动程序 - 没有给定字段的 findOneAndUpdate() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com