我的数据库中有以下文档:
{
....
"key": "val1",
....
"array" :[
{
"k":"v1",
"rejected":"0"
},
{
"k":"v2",
"rejected":"0"
}
]
.....
}
现在基本上我想设置“被拒绝”:“1”代表(“key”:“val1”&amp;&amp; array [i]。“k”:“v1”)。< / EM>
我写的API调用是:
var val1="val1";
var v1="v1";
request.put('https://api.mlab.com/api/1/databases/DB/collections/doc?q={"key": "'+val1+'","array.k":"'+v1+'"}&apiKey=.....',
{ json: { "$set": {"rejected": "1"}
} },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("----->Insertion"+body);
return res.status(200).send("[{\"status\":\"success\"}]");
}
else
{console.log(JSON.stringify(response));}
});
但API不是编辑所需的字段,而是在文档的末尾附加一个新字段:
{
....
"key": "val1",
....
"array" :[
{
"k":"v1",
"rejected":"0"
},
{
"k":"v2",
"rejected":"0"
}
]
.....
"rejected":"1"
}
答案 0 :(得分:1)
在这种情况下,请使用db.collection.update
Mongodb shell查询
If there is only one matching document
db.collection_name.update(
{key:"val1", "array.k":"v1"},
{$set:{"array.$.rejected":"1"}}
);
If there are multiple documents matching the criteria then use the below query with multi:true
db.collection_name.update(
{key:"val1", "array.k":"v1"},
{$set:{"array.$.rejected":"1"}},
{multi:true}
);
更新查询有三个部分
首先是我们必须提供的匹配部分
"key":"val1" and "array.k": "v1"
第二部分是设置更新值
使用$ set和position运算符,设置要更新的值 这里匹配array.k更新被拒绝为&#34; 1&#34;
最后一部分是指定多个文档是否与条件匹配,然后更新所有匹配的文档
答案 1 :(得分:0)
假设您的json对象被称为数组 ...读取mongodb中的位置运算符。然后这将更新您的数组元素
Object.update(
{'array.key': val1},
{$set: {'array.$. rejected': 1}},
function(err, count) { ... });