Za prvé, pokud ukládáte své dokumenty jako pole, proč je prostě neuložíte jako pole? Pokud pocházíte z prostředí relačních databází, chápu, jak byste byli v pokušení uložit to tímto způsobem, ale v Mongu, pokud je to jako pole, by mělo být uloženo jako pole.
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"0" : "h",
"1" : "o",
"2" : "m"
}
Mělo by být:
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"keys" : [ "h", "o", "m" ]
}
V tomto případě má Mongo praktický operátor s názvem $addToSet
to bude fungovat stejně jako $push
kromě toho, že jej přidá do pole pouze v případě, že neexistuje. Operace by vypadala nějak takto:
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:
S aktualizací přidá klíč do pole, pokud tam není, ale pokud chcete POUZE vědět, zda existuje nebo ne, myslím, že nejlepším způsobem by bylo použít 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();
}
Chcete-li zachovat přílohu tak, jak je, stačí změnit Keys
komu:
Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };
A vložka by se jinak neměla měnit. Také ve své sbírce možná budete chtít změnit _id
být username
nebo přidejte username
pole do vašeho dokumentu.