Pertama, jika Anda menyimpan dokumen Anda seperti sebuah array, mengapa Anda tidak menyimpannya sebagai sebuah array saja? Jika Anda berasal dari latar belakang database relasional, saya dapat melihat bagaimana Anda akan tergoda untuk menyimpannya seperti itu, tetapi di Mongo, jika itu seperti sebuah array, sebaiknya disimpan sebagai sebuah array.
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"0" : "h",
"1" : "o",
"2" : "m"
}
Seharusnya:
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"keys" : [ "h", "o", "m" ]
}
Dalam hal ini, Mongo memiliki operator praktis yang disebut $addToSet
yang akan bekerja seperti $push
kecuali bahwa itu hanya akan menambahkannya ke array jika tidak ada. Operasi akan terlihat seperti ini:
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:
Dengan pembaruan, itu akan menambahkan kunci ke array jika tidak ada, tetapi jika Anda HANYA ingin tahu apakah itu ada atau tidak, saya pikir cara terbaik adalah menggunakan 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();
}
Agar sisipan Anda tetap apa adanya, Anda hanya perlu mengubah Keys
ke:
Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };
Dan sisipan tidak perlu diubah sebaliknya. Juga, dalam koleksi Anda, Anda mungkin ingin mengubah _id
menjadi username
atau tambahkan username
bidang ke dokumen Anda.