2016-04-17 17 views
1

次のコードを使用して、コレクションを照会し、結果を得ることができます。結果の後に多数の文書を挿入する

{ "_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" } 

そして、もっとそのように:

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"} }} 
]); 

その後、私はこの結果を持っています。そして、私はそれを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! : [email protected]/mongo/shell/collection.js:226:1 
@(shell):1:1 

答えて

1

はあなたにこれを追加挿入し、カーソルです集約

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

ソートするとtotal_revenueごとに結果がソートされ、 Outは新しいコレクションに書き込みます。

1

私はこのeachsupp.forEach(function(document){db.tmp.insert(document)});

eachsupp.resultdb.tmp.insert(eachsupp.result);

を交換する

eachsuppスロー例外だと思いますが、ループでカーソルを反復処理し、各1

関連する問題