使用两个" for" Mongo查询中的循环 - 仅传递第一个或最后一个项目

使用两个" for" Mongo查询中的循环 - 仅传递第一个或最后一个项目,第1张

我有一个基于文档集(票证)聚合的查询。它会查找具有预定义DisplayLabel和任何AssignedToPerson的故障单。然后,它会对每个人的票证的WorkingDuration进行平均,并将它们组织成一个对象文档,每个对象包括AssignedToPersonWorkingDuration的平均值。然后,它会通过名为WorkingDurationAvg的新创建的密钥对它们进行排序。

它从label集合中的不同DisplayLabels列表中抓取Requests

var label = db.Requests.distinct("DisplayLabel");

var raw = db.Requests.aggregate([
  {$match:{"DisplayLabel": (label[5]) }},
  {
      $group: 
           {
            _id: "$AssignedToPerson",
            WorkingDurationAvg : { $avg :  "$WorkingDuration" }
           }

      },
  {$project:{_id : 1, "WorkingDurationAvg": 1}},
  {$sort : {"WorkingDurationAvg":1 }}
])

这会被分配到raw,因此raw.result会返回如下内容:

{
    "0" : {
        "_id" : "Bob",
        "WorkingDurationAvg" : 50.0000000000000000
    },
    "1" : {
        "_id" : "Jim",
        "WorkingDurationAvg" : 75.0000000000000000
    }
}

然后我循环遍历raw.result中的每个对象,并根据位置将分数附加到具有匹配label[5]的数组对象中,并添加到名为time的预定义字段中

var count = raw.result.length;  

raw.result.forEach
(
  function()
  {for (var i = 0; i < 1000; i  )
db.test.update(
  { "name" : (raw.result[i]._id), "dogs.capname" : (label[5]) },
  {$set: {"dogs.$.time": (count - i) / count }},
print(raw.result[i]._id)
)})

这很有效。如果您查看第一个代码段,我遇到的问题是我手动调用DisplayLabel数组编号(在此示例中,我正在调用{{ 1}} [5]的元素。我还在第三个代码片段中调用了这个label元素。我想遍历[5]的每个值。这意味着查询将使用label,然后label[0],然后label[1]运行,依此类推......

这是我尝试的内容:

label[2]

请参阅注释,了解大括号&#34;对于&#34;循环做。

据我所知,问题是基于JavaScript而不是基于Mongo。随着大括号更高,聚合运行101次,但只返回var label = db.Requests.distinct("DisplayLabel"); for (var x=0;x<100;x ){ //newly created for loop, goes up to 100 var raw = db.Requests.aggregate([ {$match:{"DisplayLabel": (label[x]) }}, //[5] is changed to [x] { $group: { _id: "$AssignedToPerson", WorkingDurationAvg : { $avg : "$WorkingDuration" } } }, {$project:{_id : 1, "WorkingDurationAvg": 1}}, {$sort : {"WorkingDurationAvg":1 }} ]) // } <<-- A bracket here would return the same thing as entering "label[100]" var count = raw.result.length; raw.result.forEach ( function() {for (var i = 0; i < 1000; i ) db.test.update( { "name" : (raw.result[i]._id), "dogs.capname" : (label[x]) }, {$set: {"dogs.$.time": (count - i) / count }}, )}) } // <<-- A bracket here returns the same thing as entering "label[0]" 值到下一个函数。使用末尾的花括号,该函数只运行一次并返回带有[100]值的结果。因此,该函数要么运行101次,要么通过该值,或者它是&#34;一个并完成&#34;。

我也尝试使用this answer's提示,但我只能使用此方法返回[0]值。

我知道我能够遍历每个[100],因为如果我按原样运行此查询,但没有raw.result以下的所有内容,我可以打印raw.result.forEach的每个迭代{1}}。添加raw.result会将我限制在最后一个迭代项目中。

最佳答案:

0 个答案:

没有答案
本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复