【问题标题】:How to pass results from one query to another in Robo3T如何在 Robo3T 中将结果从一个查询传递到另一个查询
【发布时间】:2020-11-30 00:19:22
【问题描述】:

我正在尝试将结果从一个 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”。 关于如何自动化它的任何想法?

【问题讨论】:

    标签: arrays mongodb function object robo3t


    【解决方案1】:

    您可以使用aggregate() 将所有 id 组合到一个数组中,

    • $matchcountry条件
    • $group by null 表示无并将_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'] }})
    
    

    如果您想在单个聚合查询中组合两个查询,请尝试,

    • $matchcountry条件
    • $lookup 使用 localField _id 加入 products 集合到 foreignField locId
    • $unwind 解构 products 数组
    • $group by _id null 并将所有产品推入products
    • $unwind 解构 products 数组
    • $project 显示必填字段
    var products = db.getCollection('locations').aggregate([
      {
        $match: { country: "france" }
      },
      {
        $lookup: {
          from: "products",
          as: "products",
          localField: "_id",
          foreignField: "locId"
        }
      },
      { $unwind: "$products" },
      {
        $group: {
          _id: null,
          products: { $push: "$products" }
        }
      },
      { $unwind: "$products" },
      {
        $project: {
          _id: "$products._id",
          locId: "$products.locId"
        }
      }
    ])
    

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

    【讨论】:

    • 你能控制台locId你得到结果了吗?
    • 是的,控制台日志没问题。它在 5 个元素的 1 个数组中返回 1 个对象中的 1 个数组
    • 这里不知道怎么附上截图。我认为问题出在这个 locId[0]['ids']
    • 不,这个 locId[0][0]['ids'] 也是未定义的
    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2011-12-02
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多