2017-02-26 71 views
0

你能否幫我解決這個問題?我如何總結下面文檔中的qty字段?我寫了一段代碼,當您訪問price,age等時似乎工作正常,但在訪問子文檔時似乎效果不佳。在這種情況下,total = 0`。如何總結子文檔+ MongoDB + Javascript中的字段?

文件:

{ 
"_id" : ObjectId("50a8240b927d5d8b5891743c"), 
"cust_id" : "abc123", 
"status" : "A", 
"price" : 75, 
"age" : 24, 
"ord_date" : "02/02/2012", 
"items" : [ 
    { 
     "sku" : "mmm", 
     "qty" : 5, 
     "price" : 2.5 
    }, 
    { 
     "sku" : "nnn", 
     "qty" : 500, 
     "price" : 50 
    } 
] 

}

CODE:

exports.test = function(collection, callback) { 

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    db.collection(collection).aggregate(

     { 
      $match : { "price" : { $gt: 70, $lt: 90 }} 
     }, 
     { 
      $group : { total: { $sum: "$items.qty" }} 
     }, 
    function(err, result) { 
     console.log("result",result); 
     if (result) { 
      callback(result); 
     } else { 
      callback(false); 
     } 
    }); 
}); 
} 

感謝您的幫助!

謝謝

回答

0

您需要分組之前添加{$unwind items}。這應該夠了吧。

+0

我已經按照您的建議插入了一段代碼,但不幸的是,這沒有奏效。 db.collection(集合).aggregate( { $放鬆: 「$項」 },{ $ 匹配:{ 「價格」:{$ GT:70,$ LT:90}}} , –

+0

開卷後匹配 –

+0

結果仍然是未定義:( 。{ $匹配:{ 「價格」:{$ GT:70,$ LT:90}}} , { $放鬆: 「$項」 } , { $ group:{total:{$ sum:「$ items.qty」}} }, –

0

如果從命令提示符下使用這應該工作: -

db.inventory.aggregate([ 
{$unwind: "$items"}, 
{$match: {"items.price" : { $gt: 70, $lt: 90 }}}, 
{$group:{_id:"$_id","total": {$sum:"$items.price"}}} 
]) 
1

嘗試這個具有退卷功能。

exports.test = function(collection, callback) { 

MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 
    db.collection(collection).aggregate(
     {$unwind: "$items"} , 
     { 
      $match : { "items.price" : { $gt: 70, $lt: 90 }} 
     }, 
     { 
      $group : { _id:null,total: { $sum: "$items.qty" }} 
     }, 
    function(err, result) { 
     console.log("result",result); 
     if (result) { 
      callback(result); 
     } else { 
      callback(false); 
     } 
    }); 
}); 
} 
相關問題