我需要根据自己的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
我在这里缺少什么?感谢任何帮助,提前谢谢!
答案 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,而不是像之前那样找到一个数字