程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法?

开发过程中遇到使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法的问题如何解决?下面主要结合日常开发的经验,给出你关于使用结果集数组字段中的 id 从 MongoDB 检索文档的有效方法的解决方法建议,希望对你解决使用结果集数组字段中的 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,请注明来意。