web-dev-qa-db-ja.com

mongodbシェルでforループを使用するにはどうすればよいですか?

Mongo dbシェルで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}
)
}

手伝ってくれてありがとう!

7
albert

MongoDBシェルはJavaScriptエンジンを使用しており、Javaでintを使用しているため、ループ内でのvarキーワードの使用に関する問題がJavaScriptで数年前に覚えています。

ループステートメントから変数を削除してみてください

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はデフォルトで非同期であるため、集約が完了するのを待たずに次の反復に移動する場合があることに注意してください。

3
Rahul Kumar

コードはこのように機能しますが、表示する結果はありません。少なくとも構文エラーはもうありません

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}
 )
}
2
albert

一度に多くのアイテムを挿入します。

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

チェックする

db.collectionName.find();
2
Ahmad Sharif

私は過去に同じエラーに固執しました。完璧なコーディングスタイルのすべての行に対して、ループ内でスペース/タブを使用する必要があります。

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}
    )
}
2
Arpit

ループが間違っています。6以下である必要があります。このような

for (i = 0; i <= 6; i=i+0.12){
 //your logic
}
1
Siraj Hussain