如何根据父属性查找和更新数组中的子文档

时间:2014-12-03 09:54:22

标签: node.js mongodb mongoose mongodb-query

我需要根据自己的user_id属性及其父级的my_id属性找到一个位于数组内的子文档

这些是我的模型(对话)的模式:

var listSchema = mongoose.Schema({
    user_id: Number,
    property: Boolean,
});

var conversationSchema = mongoose.Schema({
    my_id: Number,
    list: [listSchema]
});

在浏览了mongoose的文档和一些类似的问题之后,我尝试了以下内容(在我看来它应该可行):

Conversation.findOneAndUpdate(
    { "my_id": 8, "list.user_id": 16 },
    { 
        "$set": {
            "list.$.property": false
        }
    },
    function(err, doc) {
        console.error("Error:", err);
        console.log("Doc:", doc);
    }
);

但它给了我这个输出,文档根本没有更新:

Error: null
Doc: null

我在这里缺少什么?感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

我终于弄清楚发生了什么:

我将user_id属性保存为MongoDB的String,因此我尝试将此部分查询更改为:

"list.user_id": "16"

而不是:

"list.user_id": 16

仍然没有工作,但后来我发现我在listSchema中将user_id定义为Number,所以我将其更改为String:

var listSchema = mongoose.Schema({
    user_id: String,
    property: Boolean,
});

现在它起作用,如果我使用" 16"它并不重要。或者在查询中16,我认为mongoose会尝试现在找到一个String,而不是像之前那样找到一个数字