MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Überprüfen Sie, ob ein Wert in der Mongo-Sammlung vorhanden ist

Zunächst einmal, wenn Sie Ihre Dokumente wie ein Array speichern, warum speichern Sie sie nicht einfach als Array? Wenn Sie von einem relationalen Datenbankhintergrund kommen, kann ich sehen, wie Sie versucht wären, es auf diese Weise zu speichern, aber in Mongo, wenn es wie ein Array ist, sollte es nur als Array gespeichert werden.

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

Sollte lauten:

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

In diesem Fall hat Mongo einen praktischen Operator namens $addToSet das funktioniert genauso wie $push außer dass es nur dann zum Array hinzugefügt wird, wenn es nicht existiert. Die Operation würde in etwa so aussehen:

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

BEARBEITEN:

Mit dem Update wird der Schlüssel zum Array hinzugefügt, wenn er nicht vorhanden ist, aber wenn Sie NUR wissen möchten, ob er existiert oder nicht, denke ich, dass der beste Weg darin besteht, findOne zu verwenden :

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

Um Ihre Beilage unverändert zu lassen, müssen Sie nur Keys ändern zu:

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

Und der Einsatz sollte sonst nicht geändert werden müssen. Außerdem möchten Sie in Ihrer Sammlung möglicherweise die _id ändern username sein oder fügen Sie einen username hinzu Feld in Ihr Dokument.