MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sprawdź, czy wartość istnieje w kolekcji mongo

Po pierwsze, jeśli przechowujesz dokumenty jak tablicę, dlaczego nie przechowujesz ich po prostu jako tablicę? Jeśli wywodzisz się z relacyjnych baz danych, widzę, że kusi Cię, aby przechowywać je w ten sposób, ale w Mongo, jeśli jest jak tablica, powinna być przechowywana po prostu jako tablica.

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

Powinno być:

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

W tym przypadku Mongo ma przydatny operator o nazwie $addToSet który będzie działał tak jak $push z wyjątkiem tego, że doda go do tablicy tylko wtedy, gdy nie istnieje. Operacja wyglądałaby mniej więcej tak:

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

EDYCJA:

Wraz z aktualizacją doda klucz do tablicy, jeśli go tam nie ma, ale jeśli chcesz TYLKO wiedzieć, czy istnieje, czy nie, myślę, że najlepszym sposobem byłoby użycie 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();
}

Aby zachować wstawkę bez zmian, wystarczy zmienić Keys do:

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

W przeciwnym razie wkładka nie powinna być zmieniana. Ponadto w swojej kolekcji możesz chcieć zmienić _id być username lub dodaj username pole do twojego dokumentu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. jak poprawnie rzucić ObjectId w manguście

  2. Jak agregować zagnieżdżoną tablicę wyszukiwania w manguście?

  3. Przechowuj obrazy w bazie danych MongoDB

  4. Obsługa relacji meteor-kątowych

  5. Mongodb i Express