大佬教程收集整理的这篇文章主要介绍了使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的 MongoDB 版本是 3.4。我有类似这些的文件:
{
ID: 1,refs: [2,3,4,5,6]
},{
ID: 3,8]
}
@H_301_4@
refs 数组中的整数表示同一集合中其他文档的 ID。我想要实现的是检索结果集中所有引用中的所有文档。假设我的假想查询匹配上面 ID 为 1 和 3 的文档,我试图获取所有带有 1's refs + 3's refs (2,6,8) 的文档
我使用 $unwind + $lookup 首先将 refs 数组解构为单个文档,然后在同一个集合中查找以检索整个文档,但我认为这会对 refs 中的每个 ID 执行单独的查询。
有没有更有效的方法?
我不知道查询匹配 {id:1} 和 {id:3} 并将它们组合在一行中的方法。但是您可以添加一个引用 1 和 3 id 的文档,如下所示:
{
"_id" : ObjectId("60dd201bdb16e85753c4eef0"),"id" : 1,"refs" : [
2,3,4,5,6
]
}
{
"_id" : ObjectId("60dd201bdb16e85753c4eef1"),"id" : 3,8
]
}
{
"_id" : ObjectId("60dd27acdb16e85753c4eef2"),"id" : 10,"refs" : [
1,3
]
}
然后你可以使用像 {$match: {id: 10}} 这样的匹配聚合,这会与 $lookup 进行连接,并将你想要的内容放在一行中。
db.test.aggregate([
{$match: {id: 10}},{$lookup: {
from: "test",localField: "refs",foreignField: "id",as: "result"
}},{$set: {result: {$reduce: {
input: "$result.refs",initialValue: [],in: {$setUnion: ["$$value","$$this"]},}}}}
]);
结果是:
{ "_id" : ObjectId("60dd27acdb16e85753c4eef2"),"refs" : [ 1,3 ],"result" : [ 2,6,8 ] }
我们在第一个管道阶段使用 $lookup,因此在同一个集合上进行了左连接。然后在 $setUnion 聚合函数中使用 $reduce 运算符。
不是:我们没有将 $concatArrays 用于重复项。
以上是大佬教程为你收集整理的使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法全部内容,希望文章能够帮你解决使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。