我试图更新嵌套数组中的值,但无法使其工作.
我的目标是这样的
{
"_id": {
"$oid": "1"
},
"array1": [
{
"_id": "12",
"array2": [
{
"_id": "123",
"answeredBy": [],
},
{
"_id": "124",
"answeredBy": [],
}
],
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要将值推送到"answersBy"数组.
在下面的例子中,我尝试将"success"字符串推送到"123 _id"对象的"answersBy"数组,但它不起作用.
callback = function(err,value){
if(err){
res.send(err);
}else{
res.send(value);
}
};
conditions = {
"_id": 1,
"array1._id": 12,
"array2._id": 123
};
updates = {
$push: {
"array2.$.answeredBy": "success"
}
};
options = {
upsert: true
};
Model.update(conditions, updates, options, callback);
Run Code Online (Sandbox Code Playgroud)
我找到了这个链接,但它的答案只说我应该使用类似对象的结构而不是数组.这不适用于我的情况.我真的需要我的对象嵌套在数组中
如果你能在这里帮助我会很棒.我花了好几个小时来搞清楚这一点.
先感谢您!
我有一个看起来像这样的文档:
{
"_id": 3,
"Slug": "slug",
"Title": "title",
"Authors": [
{
"Slug": "slug",
"Name": "name"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想基于Authors.Slug更新所有Authors.Name.我尝试了这个,但它不起作用:
.update({"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}});
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我有以下表示项目的 JSON 结构
{
Id: "a",
Array1: [{
Id: "b",
Array2: [{
Id: "c",
Array3: [
{...}
]
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我需要能够Array2用新项目替换数组元素或仅用Array3新数组替换。
这是我替换数组项的代码Array2:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) &&
item.Array1[-1].Array2.Any(b => b.Id.Equals("c")),
Builders<Item>.Update.Set(s => s.Array1[-1].Array2[-1], newArray2Item)
);
Run Code Online (Sandbox Code Playgroud)
执行此代码时,我收到此错误:
"A write operation resulted in an error.
Too many positional (i.e. '$') elements found in path 'Array1.$.Array2.$'"
Run Code Online (Sandbox Code Playgroud)
这里是我的代码来替换Array3内Array2:
await Collection.UpdateOneAsync(
item => item.Id.Equals("a") &&
item.Array1.Any(a => a.Id.Equals("b")) && …Run Code Online (Sandbox Code Playgroud)