web-dev-qa-db-fra.com

Comment utiliser une boucle for dans le shell mongodb?

Comment utiliser une boucle for dans le shell mongo db?

Mes tentatives se collent à ce stade:

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

Merci pour l'aide!

6
albert

MongoDB Shell utilise le moteur javascript et je me souviens qu'en javascript, il y a quelques années, l'utilisation du mot-clé var dans la boucle comme nous utilisons int dans Java.

essayez en supprimant var de l'instruction loop

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

Sachez également que js est asynchrone par défaut. Par conséquent, il peut ne pas attendre la fin de l'agrégat et passer à l'itération suivante.

3
Rahul Kumar

Le code fonctionne comme ceci mais il n'y a aucun résultat à afficher. Du moins pas une erreur de syntaxe

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

Votre boucle est fausse, elle devrait être <= 6. Comme ça

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

Insérer plusieurs éléments à la fois.

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

Vérifier 

db.collectionName.find();
0
Ahmad Sharif

J'ai collé sur la même erreur dans le passé. Nous devrions utiliser des espaces/tabulations en boucle pour chaque ligne avec un style de codage parfait.

La deuxième chose est ici n est supérieur à i. Alors la requête de correspondance devrait ressembler à foo.km <n et foo.km> i

Donc, c'est le code final -

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