我遇到以下问题,我的收藏夹中有很多文件遵循这种结构
{
"_id": ObjectId("5c6ec80df2f9d02d08ce6b3c"),
"id": "0",
"name": "first",
"details": "these are the details of each doc",
"relatedDocsIds": ["1","2"]
}
在集合中不再重复“ id”参数。
我想获取具有具有相关DocsId的id的完整文档。
我给出要从ID数组中获取完整相关文档的文档的“ id”。
因此在此示例中,我要获取文档的相关文档为“ 0”,其相关文档的ID存储在数组“ relatedDocsIds”中。
查询如何?
我在nodejs后端中,我需要响应为包含该查询文档的json。
答案 0 :(得分:0)
为此,应结合使用aggregate
和$unwind
运算符使用mongodb $lookup
。
$ unwind从输入文档中解构一个数组字段,以输出每个元素的文档。
$ lookup对同一数据库中未分片的集合执行左外部联接,以从“联接”的集合中筛选文档进行处理。
这是最终查询:
db.yourCollection.aggregate([
{
$unwind: "$relatedDocsIds"
},
{
$lookup:{
from: "yourCollection",
localField: "relatedDocsIds",
foreignField: "id",
as: "relatedDocs"
}
}
])
在猫鼬中,您可以这样操作:
Model.aggregate([
{
$unwind: "$relatedDocsIds"
},
{
$lookup:{
from: "yourCollection",
localField: "relatedDocsIds",
foreignField: "id",
as: "relatedDocs"
}
}
]).exec((err, docs) => {
if (err) throw err;
console.log(docs);
});
我建议您反对这种方法,因为猫鼬有一个填充方法,它将使您能够执行此操作,而基准测试表明它比mongodb聚合要快。
答案 1 :(得分:-1)
我认为它是使用MongoDB查询数组运算符的最简单方法
示例:
getCollection('collectionName').find({
relatedDocsIds: {
$in: ['0']
}
})