2 votes

Mise à jour du document si un champ du dernier élément du tableau n'a pas la même valeur.

Je me demande comment faire correspondre un document au dernier élément d'un tableau dans un document mongodb. Disons que je veux mettre à jour un document spécifique avec de nouvelles données si un champ du dernier élément du tableau n'est pas égal à une valeur spécifique. Je sais que je peux le faire pour vérifier si un champ du tableau ne contient pas déjà cette valeur :

myTable.update({ Thing: thisThing, 
                 'myArray.Element': {$ne: parseInt(thisValue)} }, ...)

Mais comment vérifier que le dernier Element ( myArray.Element ) en myArray n'est pas égal à thisValue ? Notez que je veux faire cela avec find y no aggregate .

Meilleures salutations

0voto

giliev Points 1721

Disons que nous avons des noms de collections, comme ceci :

/* 1 */
{
    "_id" : ObjectId("58de74f8c1bb7f4256adf32c"),
    "user" : "John",
    "list_friends" : [ 
        "Alice", 
        "Bob"
    ]
}

/* 2 */
{
    "_id" : ObjectId("58de75d3c1bb7f4256adf32d"),
    "user" : "Pop",
    "list_friends" : [ 
        "Eve", 
        "Oscar"
    ]
}

Maintenant, disons que nous voulons changer le champ "user" en "Updated" pour tous les utilisateurs dont le nom d'ami est différent de "Oscar" (dans ce cas, c'est John). Cette requête :

db.getCollection('names').update({$where: "this.list_friends[this.list_friends.length - 1] !== 'Oscar'"}, {"$set": {"user": "Updated"}})

modifie la collection et le résultat final est :

/* 1 */
{
    "_id" : ObjectId("58de74f8c1bb7f4256adf32c"),
    "user" : "Updated",
    "list_friends" : [ 
        "Alice", 
        "Bob"
    ]
}

/* 2 */
{
    "_id" : ObjectId("58de75d3c1bb7f4256adf32d"),
    "user" : "Pop",
    "list_friends" : [ 
        "Eve", 
        "Oscar"
    ]
}

J'ai testé la solution en utilisant Mongo 3.2, je ne suis pas sûr qu'elle fonctionne pour les versions antérieures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X