MongoDB中的内部文档



我有文档销售

db.sale.findOne({_id : ObjectId("52ea4dd29dbc7923107ddb97")})
{
    "_id" : ObjectId("52ea4dd29dbc7923107ddb97"),
    "firm" : ObjectId("52e56c009dbc794999ea5c3d"),
    "patient" : {
        "last" : "",
        "first" : ""
    },
    "doc" : "",
    "hospital" : "",
    "discount" : 0,
    "dd" : "",
    "mode" : "cash",
    "invoice" : "300114-undefined-1",
    "items" : [
        {
            "bat" : "BJFE",
            "narco" : 0,
            "name" : "GDRNCCD",
            "mrp" : 1,
            "free" : 0,
            "qty" : 1,
            "item_discount" : 0,
            "wpr" : 1,
            "exp" : "1425168000000"
        },
        {
            "bat" : "",
            "narco" : 0,
            "name" : "GDRN vbhjdsfb",
            "mrp" : 1,
            "free" : 0,
            "qty" : 1,
            "item_discount" : 0,
            "wpr" : 0,
            "exp" : "[object Object]"
        },
        {
            "bat" : "",
            "narco" : 0,
            "name" : "GDRN vbhjdsfb",
            "mrp" : 1,
            "free" : 0,
            "qty" : 1,
            "item_discount" : 0,
            "wpr" : 0,
            "exp" : "[object Object]"
        }
    ],
    "date" : ISODate("2014-01-30T00:00:00Z"),
    "mob" : "",
    "email" : ""
}

如果一个字段中的项目并将所有项目的MRP *数量汇总到一个字段中,我该如何汇总总数。我已经阅读了MognoDB的聚合,但它仅在一组匹配的文档中,而不是在单个文档中进行聚合。是可能的吗?

{
    "_id" : ObjectId("52ea4dd29dbc7923107ddb97"),
    "firm" : ObjectId("52e56c009dbc794999ea5c3d"),
     'total_items' : items.length,
      "total" :     mrp*qty of all items,
}
db.sales.aggregate( 
    {$unwind: "$items"},
    {$project: {_id: 1,firm:1, total: {$multiply: ["$items.mrp", "$items.qty"]}}},
    {$group: {_id: {"id":"$_id", firm:"$firm"}, count: {$sum:1} , total : {$sum:"$total"}}}
)

略有更改:_id包含idfirm,您将需要一个额外的投影来匹配您所需的文档,但我认为这并不重要。

加上,您可以轻松地更改为FARM

感谢Orid,我尝试了,

db.sale.aggregate(
{ $match :{ firm :ObjectId("52e56c009dbc794999ea5c3d") }  }, 
{$project : {day : {$dayOfMonth : '$date'},items :1,patient :1,invoice :1}}, 
{$match : {day: {$gte : new Date().getDate()}}},
 {$unwind : "$items"}, 
{$project: {_id: 1,patient:1,invoice :1, total: {$multiply: ["$items.mrp", "$items.qty"]}}},  
{$group: {_id: {"id":"$_id", invoice:"$invoice",patient :"$patient"}, count: {$sum:1} , total : {$sum:"$total"}}})

结果

{
    "result" : [
        {
            "_id" : {
                "id" : ObjectId("52eab6129dbc7923107ddbaf"),
                "invoice" : "310114-undefined-1",
                "patient" : {
                    "last" : "",
                    "first" : ""
                }
            },
            "count" : 2,
            "total" : 25
        },
        {
            "_id" : {
                "id" : ObjectId("52eab6129dbc7923107ddbb0"),
                "invoice" : "310114-undefined-1",
                "patient" : {
                    "last" : "",
                    "first" : ""
                }
            },
            "count" : 1,
            "total" : 1
        },
        {
            "_id" : {
                "id" : ObjectId("52eab6129dbc7923107ddbae"),
                "invoice" : "310114-undefined-1",
                "patient" : {
                    "last" : "",
                    "first" : ""
                }
            },
            "count" : 2,
            "total" : 5
        }
    ],
    "ok" : 1
}

最新更新