Mongo Query:如何使用DBRef进行$ lookup

SantoshVysyaraju

我在使用DBRef的$ lookup时遇到麻烦。我在任何地方都找不到以下情况的解决方案。有人请帮我吗?

假设集合A为

{ 
"_id" : ObjectId("582abcd85d2dfa67f44127e0"),  
"status" : NumberInt(1), 
"seq" : NumberInt(0)    }

集合B:

{ 
"_id" : ObjectId("582abcd85d2dfa67f44127e1"),
"Name" : "from B Collection"
"bid" : DBRef("B", ObjectId("582abcd85d2dfa67f44127e0"))   }

我花了很多时间来汇总以上两个集合。我正在寻找如下的输出。

{ 
"_id" : ObjectId("582abcd85d2dfa67f44127e0"),  
"status" : NumberInt(1), 
"seq" : NumberInt(0),
B: [
    {
        "_id" : ObjectId("582abcd85d2dfa67f44127e1"),
        "Name" : "from B Collection"
    }
]}

请帮助我进行Mongo查询,以上述格式检索结果。提前致谢

凯瑟琳·R

理想情况下,您将能够将DBRef更改为普通的objectId或仅更改为字符串类型。正如指出的这个帖子,也可以在令人费解的查询使用DBREF。关键是一个$ addFields阶段,{$objectToArray: "$$ROOT.bid"}用于将DBRef值转换为可用格式。

您需要从集合B开始聚合,因为那是引用所在的位置,并且DBRef需要在查找之前进行按摩。知道是这种情况,目标输出形状可能会改变;但是,以下汇总可以帮助您获得所需的信息:

db.getCollection('B').aggregate([
{$addFields: {fk: {$objectToArray: "$$ROOT.bid"}}},
{$lookup: {
    from: 'A',
    localField: 'fk.1.v',
    foreignField: '_id',
    as: 'A'
}},
// the below is transforming data into the format in the example
{$addFields: {'A.B': {_id: '$_id', Name: '$Name'}}},
{$unwind: '$A'},
{$replaceRoot: {newRoot: '$A'}}
])

如果需要将groupBy多个B匹配分组到一个数组中,则可能需要执行a

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

mongo 聚合如何选择“$graphLookup 或 $lookup”

Mongo Lookup使用$ id参考加入集合

mongo 聚合 $lookup 与数组

如何在mongo db中计算$ lookup字段?

使用嵌套查询的Mongo $ lookup过滤器

使用不匹配值的$ lookup的Mongo聚合对象

Mongo $ lookup使用mongoose嵌套3级数组

我如何使用@Query-> Spring data mongo从@DBRef文档中获取数据

如何限制从$ lookup操作返回的字段添加到Mongo视图

如果Mongo $ lookup是左外部联接,那么它将如何排除不匹配的文档呢?

使用let时,带有$ lookup的Mongo聚合不起作用

在Mongo Aggregate $ lookup查询中使用数组第一字段来匹配文档

Spring数据mongo中的MongoDB $ Lookup

Mongo多个$ lookup和$ group合计

$ lookup数组mongo聚合中的每个元素

在$ lookup MONGO上提高$ match的速度

Mongo任何集合中有多个$ lookup

如何在mongo聚合和Lookup ...中将“类型”信息复制到“实例”中并保留原始列表?

$ lookup在聚合中可以在mongo shell命令中正常工作,但是在尝试使用mongoose节点进行尝试时,然后获取了空数组作为响应

Spring Data Rest Mongo-如何使用ID而不是URI创建DBRef?

Mongo $ lookup具有更多集合和空字段

具有多个$ match或$ pipeline条件的Mongo $ lookup

Mongo聚合和带有$ lookup的$ group嵌套数组

mongo管道中的$ in / $ eq $ lookup不起作用

具有多个$ expr参数的Mongo $ lookup $ pipeline在$ lookup结果中未返回正确的数据

Spring Data Mongo-如何通过@DBRef字段的ID查询

在mongo go驱动程序中使用DBRef

如何过滤$ lookup结果

在 $group 之后使用 $lookup