如何在Robo3T中将结果从一个查询传递到另一个

时间:2020-08-10 11:39:05

标签: arrays mongodb function object robo3t

我试图将结果从一个MongoDB查询传递到另一个查询,但是结果在Object中,我需要将其作为数组。 示例:

var locId = db.getCollection('locations').find({country:"France"}, {_id:1}).toArray()

如何将结果传递给另一个查询:

db.getCollection('products').find({locId: {$in: locId }})

第一个查询的结果类似于:

array[1] [
obj[0] {_id: LocId123},
obj[1] {_id: LocId456},
obj[1] {_id: LocId789},
]

我能够通过此传递值:

locId = Array.from(locId , value => value._id )

问题是我无法将其封装在外部函数中,因为无法通过函数参数传递此“ _id”。 关于如何实现自动化的任何想法?

1 个答案:

答案 0 :(得分:2)

您可以使用aggregate()组合数组中的所有ID,

  • $match country条件
  • $groupnull表示无意义,并将_id推入数组ids
  • $project显示_ids并隐藏_id
var locId = db.getCollection('locations').aggregate([
  { $match: { country: "france" } },
  {
    $group: {
      _id: null,
      ids: { $push: "$_id" }
    }
  },
  {
    $project: { _id: 0, ids: 1 }
  }
])

游乐场:https://mongoplayground.net/p/8_uzjCNMy00

结果:

[{
    "ids": [1, 2, 3]
}]

您可以访问:

db.getCollection('products').find({locId: {$in: locId[0]['ids'] }})


如果要将两个查询合并到一个聚合查询中,请尝试

  • $match country条件
  • $lookup将使用localField products的{​​{1}}集合加入foreignField _id
  • $unwind来解构locId数组
  • products的{​​{1}}为空,并将所有产品推入$group
  • _id来解构products数组
  • $unwind以显示必填字段
products

游乐场:https://mongoplayground.net/p/xOnohm0OWBV

相关问题