结果后插入许多文件

时间:2016-04-17 22:20:07

标签: mongodb aggregation-framework

我有以下代码来查询集合并获得一些结果。

var subquery = {"shipdate" : { 
    "$gte" : 19960101, 
    "$lt" : 19960401 } 
};

var eachsupp = db.lineitems.aggregate([
    { $match : subquery },
    { $project : {
        "_id" : 0,
        "revenue" : {$multiply : ["$extendedprice", {$subtract : [1, "$discount"] }] },
        "supplier_no" : "$partsupp.supplier.suppkey",
        "name" : "$partsupp.supplier.name",
        "address" : "$partsupp.supplier.address",
        "phone" : "$partsupp.supplier.phone" }},
    { $group : {
        _id : "$supplier_no",
        total_revenue : { $sum : "$revenue" },
        name : {$first : "$name"},
        address : {$first : "$address"},
        phone : {$first : "$phone"} }}
]);

之后我得到了这个结果:

{ "_id" : 5, "total_revenue" : 39995.208, "name" : "Supplier#000000005", "address" : "Gcdm2rJRzl5qlTVzc", "phone" : "21-151-690-3663" }
{ "_id" : 138, "total_revenue" : 37736.3465, "name" : "Supplier#000000138", "address" : "utbplAm g7RmxVfYoNdhcrQGWuzRqPe0qHSwbKw", "phone" : "29-533-434-6776" }

更像那样。我想在tmp集合中插入它。像这样:

db.tmp.insert(eachsupp.result);

db.tmp.find().sort({total_revenue : -1}).limit(1);

但我有一个错误,因为它无法插入。

db.tmp.insert(eachsupp.result);
2016-04-17T23:12:20.683+0100 E QUERY    [thread1] Error: no object passed to ins
ert! : DBCollection.prototype.insert@src/mongo/shell/collection.js:226:1
@(shell):1:1

2 个答案:

答案 0 :(得分:1)

我认为替换db.tmp.insert(eachsupp.result);

使用此eachsupp.forEach(function(document){db.tmp.insert(document)});

eachsupp.result是抛出异常

eachsupp是游标,用循环迭代游标并插入每个

答案 1 :(得分:1)

在汇总中添加此内容

{ $sort: { total_revenue: -1 } },
{$out: "eachsupp"}

排序将根据total_revenue和结果对结果进行排序 Out会将它写入新的收藏。