如何在Mongoose或MongoDB中编写更新查询?

时间:2014-09-23 10:18:51

标签: node.js mongodb mongoose

我有以下架构

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,但我不知道编写更新查询的正确方法。

1 个答案:

答案 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。