gpt4 book ai didi

mongodb - 发出前从 MongoDB 更新结果

转载 作者:可可西里 更新时间:2023-11-01 10:50:54 26 4
gpt4 key购买 nike

假设我有这个查询

var query1 = usersrec.find({username:target}, {});
query1.exec(function (err, docs){
if(err) throw ;
});

它给出了这个结果

{ 
"_id" : ObjectId("5806ba413202e30d68152aa4"),
"username" : "sammy",
"firstname" : "samuel",
"lastname" : "jackson",
"gender" : "male",
"phone" : "0123456789",
"image" : "sam.jpg"
}

我想在使用 socket.io 发出之前将我从另一个集合 {"Balance": "1011"} 中获得的值添加到这个结果文档中。

我已经尝试了很多东西并遇到了错误,但是这在没有添加余额键/值的情况下完成了:

docs[0].balance = '1011';
console.log(docs);
socket.emit('usernames', docs);

文档仍保留其初始值。我错过了什么?

最佳答案

似乎您正在使用 Mongoose 和 Mongoose documents不允许添加属性。您需要调用 lean() exec() 之前的方法,因为启用精益选项的查询返回的文档是纯 javascript 对象:

来自文档:

var query1 = usersrec.find({username:target}, {});
query1.lean().exec(function (err, docs) {
docs[0] instanceof mongoose.Document // false
});

所以你的代码应该是这样的:

var query1 = usersrec.find({username:target}, {});
query1.lean().exec(function (err, docs){
if(err) throw ;
docs[0].balance = '1011';
console.log(docs);
socket.emit('usernames', docs);
});

或者将返回的文档转换为普通对象:

var query1 = usersrec.find({username:target}, {});
query1.exec(function (err, docs){
if(err) throw ;
docs = docs.map(function(o){ return o.toObject(); });
docs[0].balance = '1011';
console.log(docs);
socket.emit('usernames', docs);
});

关于mongodb - 发出前从 MongoDB 更新结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128967/

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