我有以下代码来查询集合并获得一些结果。
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
答案 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会将它写入新的收藏。