sql >> Database teknologi >  >> NoSQL >> MongoDB

Tjek om værdi findes i mongo-samling

For det første, hvis du gemmer dine dokumenter som et array, hvorfor gemmer du dem så ikke som et array? Hvis du kommer fra en relationel databasebaggrund, kan jeg se, hvordan du ville blive fristet til at gemme det på den måde, men i Mongo, hvis det er som et array, skal det bare gemmes som et array.

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

Skal være:

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

I dette tilfælde har Mongo en praktisk operator kaldet $addToSet der vil fungere ligesom $push bortset fra at det kun vil tilføje det til arrayet, hvis det ikke eksisterer. Operationen ville se sådan ud:

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

EDIT:

Med opdateringen vil den tilføje nøglen til arrayet, hvis den ikke er der, men hvis du KUN vil vide, om den eksisterer eller ej, tror jeg, at den bedste måde ville være at bruge findOne :

// 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();
}

For at beholde din indsats som den er, skal du bare ændre Keys til:

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

Og indsatsen skulle ellers ikke skulle ændres. I din samling vil du måske også ændre _id at være username eller tilføj et username felt til dit dokument.




  1. Hvordan siger man... match, når felt er et tal... i mongodb?

  2. Hvordan opretter man en aggregation fra en liste over AggregationOperation i Spring-data MongoDB?

  3. Mongo Aggregation:$group og $project array til at gøre indsigelse for tællinger

  4. Mongotemplate - Query ObjectId ifølge operatoren større end (gt) eller mindre end (lt).