Mongodb mongoose在嵌套的数据数组上的位置
我的收藏是这样的:Mongodb mongoose在嵌套的数据数组上的位置,mongodb,mongoose,Mongodb,Mongoose,我的收藏是这样的: { "_id" : ObjectId("590886af47627f86e5857141"), "code" : "MY", "pre_title" : "republic of", "name" : "Malaysia", "topics" : [ { "name" : "overview", "body" : "ergergerg123234", "type" : "info", "_id" : O
{
"_id" : ObjectId("590886af47627f86e5857141"),
"code" : "MY",
"pre_title" : "republic of",
"name" : "Malaysia",
"topics" : [
{
"name" : "overview",
"body" : "ergergerg123234",
"type" : "info",
"_id" : ObjectId("5931243d26fca3496dbffe92"),
"facts" : [
{
"key" : "capital",
"value" : "Kuala Lumpur",
"_id" : ObjectId("5931243d26fca3496dbffe96")
},
{
"key" : "population",
"value" : "232424234",
"_id" : ObjectId("5931243d26fca3496dbffe95")
},
{
"key" : "reliogion",
"value" : "Islam",
"_id" : ObjectId("5931243d26fca3496dbffe94")
},
{
"key" : "government_form",
"value" : "Federal constitutional monarchy",
"_id" : ObjectId("5931243d26fca3496dbffe93")
}
]
},
{
"name" : "Good to know",
"body" : "here in good to know",
"type" : "info",
"_id" : ObjectId("5931243d26fca3496dbffe90"),
"facts" : [
{
"key" : "key1",
"value" : "value1",
"_id" : ObjectId("5931243d26fca3496dbffe91")
}
]
}
]
}
我需要访问topicId=“X”和countryId=\u id的主题。我写了这行,但结果是错误的:所以它有两个条件。第一个countryId应匹配,然后是TopicId
var query = {"_id":_id,"topics.$._id": topicId }
Country.findOne(query ,function (err, topic) {
console.log('topic',topic);
})
更新:
它是这样工作的,但我还需要深入了解事实,其中key={XX}
Country.findById(query).select({ topics: { $elemMatch: { _id: topicId }
} }).
.then((topic,err) => {
从查询中删除$使用主题。$。\u id代替主题。$。\u id
Country.findOne({“\u id”:{u id,“主题”.\u id:topicId},{“主题”.$::1},函数(err,topic){
。是对语法的更正。请更仔细地阅读链接的答案和文档。我还需要另一个位置:{“\u id”:{u id:},“主题”;“topics.\u id”:topicId,“主题。$.facts.key”:_key}。实际上where子句是3个条件。所有内容都包含在其中。匹配和“筛选”几乎有所有可能的情况单数或多个数组元素。你主要还是不理解基本语法。请再次阅读和学习。当你有一个新问题与你实际提出的问题不同时,你可以回答。但请先理解给出的答案。@NeilLunn:我完全读过了。我的问题不同。这个问题只有1个内部数组“shape”。我的还有一个facts。我的第一个问题通过你的链接解决了。但是现在我需要进入facts内部,所以查询如下:var query={“\u id”:{u id”:{topicd,“facts”:{$elemMatch:{key:key}}}
但是它也不工作。不,它返回所有数据
var query = {"_id":_id,"topics._id": topicId }
Country.findOne(query,{topics.$:1} ,function (err, topic) {
console.log('topic',topic);
})