【问题标题】:MongoDB : Referencing first query in the second queryMongoDB:在第二个查询中引用第一个查询
【发布时间】:2015-04-27 17:10:20
【问题描述】:

我正在尝试在 Mongodb 中执行以下两个查询。我被困在如何从 "Query #2" 中正确引用 "Query #1" 。这里的目标是按“product_id”分组。 “Product_id”的粒度小于“variant_id”。我也可以非规范化并将 product_id 包含在“events_inventories”集合中,但我现在拒绝这样做。

就在这里。非常感谢任何帮助!:

//查询#1:

var variant_inventory = db.getCollection('events_inventories').aggregate([

{
    $match: {
        "updated_at": {
            "$gt": new Date(2014, 1, 1)
        },
    }
},

{
    $group: {
        _id: {

            variant: "$variant_id",
            date: {
                "yr": {
                    "$year": "$updated_at"
                },
                "mo": {
                    "$month": "$updated_at"
                },
                "day": {
                    "$dayOfMonth": "$updated_at"
                }
            }

        },

        inventory: {
            $min: "$count_on_hand"
        }

    }

}
]);

//查询#2

db.getCollection('products_variants').aggregate([{
    $match: {
        variant_id: "$variant_inventory._id.variant"
    }
},

{
    $group: {
        _id: {
            product_id: "$product_id",
            date: "variant_inventory._id.date",
        },
        prodinventory: {
            $min: "variant_inventory.inventory"
        }
    }
}
]);

【问题讨论】:

  • 您是否知道变量variant_inventory 拥有一个游标,因为aggregate 方法返回一个游标,您需要使用toArray() 方法来获取数组中的结果?此外,如果您可以编辑您的问题以包含一些示例文档以从两个集合中进行测试以及两个查询的预期最终结果,那将是非常棒的。
  • 在您想要匹配的第二个查询中 { variant_id: { $in [ ] } } 所以您需要将第一个结果转换为 product_ids 数组。我将在答案中显示一个小代码示例。

标签: mongodb mongodb-query nosql


【解决方案1】:

您需要将第一个查询的结果转换为一个变体 id 数组,然后使用“$in”将其传递给第二个查询。

例子:

query1=db...;
ids=[];
query1.forEach(function(d) { ids.push(d._id.variant); });
query2=db.collection.aggregate( {$match: { variant_id:{$in: ids } } } );

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 2013-11-01
    • 2019-05-05
    • 2020-03-09
    • 2022-10-07
    • 1970-01-01
    • 2015-03-16
    • 2018-07-30
    • 2021-02-13
    相关资源
    最近更新 更多