9

如何在 mongo db shell 中使用 for 循环?

我的尝试停留在这一点上:

for (var i = 0; i <= 6; i=i+0.12){
var n = i + 0.12;
db.test.aggregate(
    { $sort: {'deviation': -1}},
    { $unwind: '$foo' },
    { $match: { 'foo.km': {$gt: {n}, $lt: {i}}}},
    { $limit: 1}
)
}

感谢帮助!

4

5 回答 5

5

MongoDB shell 使用 javascript 引擎,我记得几年前在 javascript 中使用 var 关键字在循环中存在一些问题,因为我们在 java 中使用 int。

尝试从循环语句中删除 var

for (i = 0; i <= 6; i=i+0.12){ 
  var n = i + 0.12;
 db.test.aggregate([
  { $sort: {'deviation': -1}},
  { $unwind: '$foo' },
  { $match: { 'foo.km': {$gt: {n}, $lt: {i}}}},
  { $limit: 1}
 ])
}

还要注意 js 默认是异步的,所以它可能不会等待聚合完成,可能会移动到下一次迭代。

于 2016-09-21T20:06:30.197 回答
4

一次插入多个项目。

for (var i = 1; i <= 25; i++) {
   db.collectionName.insert({ x : i })
}

去检查

db.collectionName.find();
于 2018-12-03T07:20:20.600 回答
2

我过去犯了同样的错误。我们应该在具有完美编码风格的每一行循环中使用空格/制表符。

第二件事是这里 n 大于 i。然后匹配查询应该像 foo.km < n 和 foo.km > i

所以,这是最终代码 -

for (var i = 0; i <= 6; i=i+0.12){
    var n = i + 0.12;
    db.test.aggregate(
        { $sort: {'deviation': -1}},
        { $unwind: '$foo' },
        { $match: { 'foo.km': {$lt: {n}, $gt: {i}}}},
        { $limit: 1}
    )
}
于 2017-04-07T16:38:01.473 回答
2

代码是这样工作的,但没有结果可以显示。至少不再是语法错误

for (i = 0; i <= 6; i=i+0.12){ 
  var n = i + 0.12;
 db.test.aggregate(
  { $sort: {'deviation': -1}},
  { $unwind: '$foo' },
  { $match: { 'foo.km': {$gt: [n], $lt: [i]}}},
  { $limit: 1}
 )
}
于 2016-09-22T06:43:54.400 回答
1

你的循环是错误的,它应该是<=6。像这样

for (i = 0; i <= 6; i=i+0.12){
 //your logic
}
于 2016-09-21T15:09:25.880 回答