sql >> Database >  >> NoSQL >> MongoDB

Controleer of er waarde bestaat in de mongo-verzameling

Ten eerste, als u uw documenten als een array opslaat, waarom slaat u ze dan niet gewoon op als een array? Als je van een relationele database-achtergrond komt, kan ik zien hoe je in de verleiding zou komen om het op die manier op te slaan, maar in Mongo, als het als een array is, zou het gewoon als een array moeten worden opgeslagen.

{
    "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
    "0" : "h",
    "1" : "o",
    "2" : "m"
}

Zou moeten zijn:

{
    "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
    "keys" : [ "h", "o", "m" ]
}

In dit geval heeft Mongo een handige operator genaamd $addToSet dat werkt net als $push behalve dat het het alleen aan de array zal toevoegen als het niet bestaat. De operatie zou er ongeveer zo uitzien:

collection.update( query, { $addToSet : { 'keys' : 'l' }}, callback );
// add key 'l'

collection.update( query, { $addToSet : { 'keys' : 'm' }}, callback );
// looks in document, sees 'm' in array, and does nothing

BEWERKEN:

Met de update zal het de sleutel aan de array toevoegen als het er niet is, maar als je ALLEEN wilt weten of het bestaat of niet, denk ik dat de beste manier zou zijn om findOne te gebruiken :

// find the doc by _id  and the value you want in keys, returns null if it's not a match
collection.findOne({ _id : 52e5361f30f28b6b602e4c7f, 'keys' : 'l' }, function(err, doc) {
    if( doc == null ) {
        // do whatever you need to do if it's not there
    } else {
        // do whatever you need to if it is there
    }
    db.close();
}

Om uw invoeging te behouden zoals deze is, hoeft u alleen maar Keys . te wijzigen naar:

Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };

En de insert zou anders niet hoeven te veranderen. In uw verzameling wilt u misschien ook de _id . wijzigen te zijn username of voeg een username toe veld toe aan uw document.




  1. MongoDB cross-databasequery

  2. MongoDB:geneste array in aggregatiefunctie toewijzen

  3. Hoe kan ik de LIKE-operator op mangoest gebruiken?

  4. $ push-equivalent voor kaart in mongo