如何在Mongo JS中的变量中保存查询结果并用它更新文档?

时间:2018-03-13 18:40:45

标签: javascript node.js mongodb mongoose mongodb-query

我想计算.js文件中的平均值,并在Mongo DB中的集合中插入所有文档的结果,但下面的代码不起作用。

db.createCollection("myCol");

db.myCol.insert( { item: "card", qty: 15 } );
db.myCol.insert( { item: "card", qty: 92 } );

var mean = db.myCol.aggregate(
   [
     {
       $group:
         {
           _id: "$card",
           average: { $avg: "$qty" }
         }
     }
   ]
); 

db.myCol.updateMany(
   { "item": { $eq: "card" } },
   {
     $set: { "mean" : mean },
   }
)

我使用命令

在Mongo Shell中运行.js文件
load (jsfile.js)

1 个答案:

答案 0 :(得分:0)

db.createCollection("myCol");

db.myCol.insert( { item: "card", qty: 15 } );
db.myCol.insert( { item: "card", qty: 92 } );

var mean = db.myCol.aggregate(
   [
     {
       $group:
         {
           _id: "$item",
           average: { $avg: "$qty" }
         }
     }
   ]
).toArray(); 

db.myCol.updateMany(
   { "item": { $eq: "card" } },
   {
     $set: { "mean" : mean },
   }
)
你应该尝试这个。它会起作用。

<强>问题

返回cursor个对象的操作很少。在您的情况下,aggregation查询的游标对象存储在mean变量中。这就是您没有获得所需值的原因,而cursor集合中myCol对象的更新已被更新。

<强>解决方案

我已使用toArray方法更新了代码,该方法将cursor转换为对象数组。所以这肯定会有效。

让我知道它是否对你有所帮助。