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!
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.
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}
)
}
Votre boucle est fausse, elle devrait être <= 6. Comme ça
for (i = 0; i <= 6; i=i+0.12){
//your logic
}
Insérer plusieurs éléments à la fois.
for (var i = 1; i <= 25; i++) {
db.collectionName.insert({ x : i })
}
Vérifier
db.collectionName.find();
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}
)
}