gpt4 book ai didi

node.js - MongoDB:子数组的更新属性只更新第一个元素

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:31 25 4
gpt4 key购买 nike

匹配的元素看起来像这样:

{
"_id": {
"$oid": "519ebd1cef1fce06f90e3157"
},
"from": "Tester2",
"to": "Tester",
"messages": [
{
"username": "Tester2",
"message": "heeey",
"read": false
},
{
"username": "Tester",
"message": "hi!",
"read": false
},
{
"username": "Tester2",
"message": "test",
"read": false
}
],
}

现在我尝试将 read 属性设置为用户名不等于 Tester 的子元素的当前日期:

var messages = db.collection('messages');
messages.update(
{
_id: new BSON.ObjectID("519ebd1cef1fce06f90e3157"),
messages: {
$elemMatch: { username: { $ne: "Tester" } }
}
},
{ $set: { 'messages.$.read': new Date() } },
{ multi: true }, function(error, result) {
console.log(error);
console.log(result);
});

但只有第一个消息子元素 read 属性更新:

{
"_id": {
"$oid": "519ebd1cef1fce06f90e3157"
},
"from": "Tester2",
"to": "Tester",
"messages": [
{
"username": "Tester2",
"message": "heeey",
"read": {
"$date": "2013-01-01T00:00:00.000Z"
}
},
{
"username": "Tester",
"message": "hi!",
"read": false
},
{
"username": "Tester2",
"message": "test",
"read": false
}
],
}

代码有什么问题?我正在使用 node.js v0.10.8 和 MongoDB v2.4.3 以及 node-mongodb-native .

最佳答案

您的代码没有任何问题; $ operator包含第一个 匹配数组元素的索引。 {multi: true} 选项仅使 update 应用于多个文档,而不是数组元素。要在单个 update 中更新多个数组元素,您必须通过数字索引指定它们。

所以你必须做这样的事情:

messages.update(    
{
_id: new BSON.ObjectID("519ebd1cef1fce06f90e3157")
},
{ $set: {
'messages.0.read': new Date(),
'messages.2.read': new Date()
} },
function (err, result) { ... }
);

关于node.js - MongoDB:子数组的更新属性只更新第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750391/

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