【问题标题】:Mongodb Aggregation with collectionMongodb 聚合与集合
【发布时间】:2014-05-27 09:12:59
【问题描述】:

产品列表附加到程序中。 有多个程序具有相同的产品列表和相同的名称。 我需要的是聚合数据以获取具有关联程序数组的不同程序的列表。

我所做的是:

  Program.aggregate( [
   { $group: {
        _id: "$name", count: {$sum: 1} ,  products : { $addToSet : "$products.asin" }}
   }])  

但是通过该查询,我得到了多个具有相同数据的数组:

[{ _id:“气象”,计数:681, 产品: [ [“B003I4DS22”、“B00BH56GXM”、“B006SMNQWI”、“B008QZQRIK”、“B00AC1ZLJC”、“B0064X7FVE”、“B009M4SGUG”、 “B0013K6C6M”、“B002JM0DEK”、“B0009ENA2W”] , [ "B003I4DS22", "B00BH56GXM", "B006SMNQWI", "B008QZQRIK", "B0064X7FVE", "B00AC1ZLJC" ],[“B003I4DS22”,“B00BH56GXM”,“B0064X7FVE”,“B008QZQRIK”, “B006SMNQWI”、“B00AC1ZLJC”、“B009M4SGUG”、“B0013K6C6M”、“B002JM0DEK”、 “B0009ENA2W”}]

我想要的是:

[{ _id:“Météo”,计数:681,产品:[ [“B003I4DS22”、“B00BH56GXM”、“B006SMNQWI”、“B008QZQRIK”、“B00AC1ZLJC”、“B0064X7FVE”、“B009M4SGUG”、 "B0013K6C6M", "B002JM0DEK", "B0009ENA2W"]]}

【问题讨论】:

    标签: mongodb mongoose aggregation-framework


    【解决方案1】:

    要获得product.asin 值的不同列表,您需要在对文档中的products 数组进行分组之前对它们进行$unwind

    db.test.aggregate( [
       { $unwind: '$products' },
       { $group: {
            _id: "$name", 
            count: {$sum: 1} ,  
            products : { $addToSet : "$products.asin" }}
       }]) 
    

    【讨论】:

    • 其实这不就是计算数组中的所有元素吗?该集合将是不同的,但计数不会,并且实际上表示数组中的总元素。除非您添加了一些其他阶段来实际执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2017-07-13
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多