为了账号安全,请及时绑定邮箱和手机立即绑定

将$ graphLookup的ObjectId与String匹配

将$ graphLookup的ObjectId与String匹配

一只萌萌小番薯 2019-12-06 10:59:51
我正在尝试运行一个$graphLookup类似下面所示的示例:目的是在给定特定记录($match在此处有注释)的情况下,通过immediateAncestors属性检索其完整的“路径” 。如您所见,这没有发生。我$convert在这里介绍了_idfrom的处理方式,因为string相信可以与_idfrom immediateAncestors记录列表(是string)进行“匹配” 。因此,我确实使用不同的数据运行了另一个测试(不ObjectId涉及):db.nodos.insert({"id":5,"name":"cinco","children":[{"id":4}]})db.nodos.insert({"id":4,"name":"quatro","ancestors":[{"id":5}],"children":[{"id":3}]})db.nodos.insert({"id":6,"name":"seis","children":[{"id":3}]})db.nodos.insert({"id":1,"name":"um","children":[{"id":2}]})db.nodos.insert({"id":2,"name":"dois","ancestors":[{"id":1}],"children":[{"id":3}]})db.nodos.insert({"id":3,"name":"três","ancestors":[{"id":2},{"id":4},{"id":6}]})db.nodos.insert({"id":7,"name":"sete","children":[{"id":5}]})和查询:db.nodos.aggregate( [  { $match: { "id": 3 } },  { $graphLookup: {      from: "nodos",      startWith: "$ancestors.id",      connectFromField: "ancestors.id",      connectToField: "id",      as: "ANCESTORS_FROM_BEGINNING"    }  },  { $project: {      "name": 1,      "id": 1,      "ANCESTORS_FROM_BEGINNING": "$ANCESTORS_FROM_BEGINNING.id"    }  }] )...输出了我期望的结果(这5条记录直接或间接与id3 条记录相关):{    "_id" : ObjectId("5afe270fb4719112b613f1b4"),    "id" : 3.0,    "name" : "três",    "ANCESTORS_FROM_BEGINNING" : [         1.0,         4.0,         6.0,         5.0,         2.0    ]}问题是:有没有一种方法可以实现我一开始提到的对象?我正在运行Mongo 3.7.9(来自官方Docker)提前致谢!
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超5个赞

值得写,因为您不会是最后一个问它的人。人们现在已经问过,谁还不知道这些“转换”功能即将到来。一旦投入生产,我希望尝试它的人数只会增加。因此,我想是“感谢您提出的问题”。

查看完整回答
反对 回复 2019-12-06
  • 2 回答
  • 0 关注
  • 1272 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信