【问题标题】:Nested queries in Mongo DB using mongoose and NodeJS使用 mongoose 和 NodeJS 在 Mongo DB 中嵌套查询
【发布时间】:2020-10-06 20:12:19
【问题描述】:

我有这两个我使用的集合,我需要使用第一个集合中的参数从其中一个集合中查询

集合示例:

Collection 1 :{
id: 1234,
lastDate : "2020-09-10T08:30:14.960+00:00"
}

Collection 2 :{
site : 1234,
date : "2020-09-10T08:30:14.960+00:00"
}

我需要从 Collection 1 中获取 id 和 "lastDate" 并使用它来查询 Collection 2

抱歉解释不好,如果需要更多信息或任何东西,请告知

添加的 SQL 等效项

SELECT * FROM collection2 
WHERE site IN (SELECT id FROM collection1) and
 date IN (SELECT lastDate FROM collection1);

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:
     let params  = {_id:1}
     let data = await Collection1.aggregate([
        {$match:params},
       {
          $lookup: {
            from: "collection2",
            localField: "$collection1datefield",
            foreignField: "$collection2datefield",
            as: "collection2Object"
          }
       }
      ])
    

    【讨论】:

    • 我在每个集合中有多个...这只是一个文档的示例...
    • 你的意思是从collection1你会获取多个文档然后你会匹配collection 2?
    • 我将从两个集合中获取多个文档我需要来自集合二的数据,集合一是查询参数条件
    • 对不起,我认为你不理解我(我的错不是你的)我想更清楚,我需要获取所有 id 和 lastDate 并将它们与网站和收集日期进行比较2 我有这个 sql 查询,我认为应该在 sql 中做同样的事情(我比 mongo 更了解 sql,所以更容易像这样演示它):在原始帖子中添加
    • 试试我的代码,它将返回集合一中的所有匹配数据。然后我对带有日期的第二个集合进行了查找(加入)。其中第一个集合的日期将在第二个集合中匹配您将来自第二个集合的文档。
    【解决方案2】:

    如果你已经完成了对第一个集合的引用,那么你可以使用简单的查询,即

    const query = await Collection1.findOne({id: req.params.id}).populate('site lastDate');
    

    【讨论】:

    • 我需要集合 2 中的日期与 lastDate 相同...并且 id 需要与诅咒相同。 populate 将返回任何 popaple lastDate
    【解决方案3】:
     db.FIRST_COLLECTION.aggregate([
      {
        $lookup: {
          from: "FIRST_COLLECTION",
          localField: "id", // local field of first collection
          foreignField: "site", // foreign field at second collection
          as: "liste",
        },
      },
      { $unwind: "$liste" },
      {
        $group: {
          _id: "$site",
          data: {
            $addToSet: {
              site: $site,
              date: $date,
            },
          },
        },
      },
    ]);
    

    我邀请您阅读有关Aggregation的更多信息

    【讨论】:

    • 已经尝试过了...这将提供来自两个集合的数据,我只需要来自 collection2
    • 我已更新查询以使用站点对数据进行分组,因此您将拥有站点
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2017-09-05
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多