我有以下架构
var myschema = new schema({
username: { type: String, required: validationMessages.required, index: { unique: true }, lowercase: true },
siteConfig:{ type: Array}
});
我的文档看起来像这样
{
"_id" : ObjectId("5411a6fb4bcc787927825dac"),
"username" : "admin"
"siteConfig" : [
{
"name" : "landing"
"page" : {
"name" : "home",
"sections" : [
{
"name" : "header",
},
{
"name" : "bodycontent",
},
{
"name" : "footer",
}
]
}
}
}
我想更新 siteConfig-> page->部分下的“name”:“header”属性,条件是否符合以下条件
(“用户名”:“admin”&&"“siteConfig.name”:“登陆”&&"“page.name”:“home”)
我使用点符号和elematch,但我不知道编写更新查询的正确方法。
答案 0 :(得分:1)
我认为问题可能是您没有定义siteConfig
的架构。首先,像这样更新您的架构:
var ObjSchema = new Schema({
...
siteConfig: [
{
name: {type: String},
page: {
name: {type: String},
sections: [
{
name: {type: String},
}
],
},
}
],
});
现在您可以像这样更新:
var query = {
username: 'admin',
'siteConfig.name': 'landing',
'siteConfig.page.name': 'home',
};
var update = {
$set: {
'siteConfig.page.sections.0.name': 'header',
},
};
var options = {
multi: true,
};
Obj.update(query, update, options, function(err, numAffected) {
...
});
我不确定您要更新的内容,因此您可以根据需要更改update
dict。如果您不想更新多个文档,请更改options
dict。