Trước hết, nếu bạn đang lưu trữ tài liệu của mình như một mảng, tại sao bạn không lưu trữ chúng dưới dạng một mảng? Nếu bạn đến từ nền tảng cơ sở dữ liệu quan hệ, tôi có thể thấy bạn muốn lưu trữ nó theo cách đó như thế nào, nhưng trong Mongo, nếu nó giống như một mảng, nó chỉ nên được lưu trữ dưới dạng một mảng.
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"0" : "h",
"1" : "o",
"2" : "m"
}
Nên là:
{
"_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
"keys" : [ "h", "o", "m" ]
}
Trong trường hợp này, Mongo có một toán tử tiện dụng được gọi là $addToSet
điều đó sẽ hoạt động giống như $push
ngoại trừ việc nó sẽ chỉ thêm nó vào mảng nếu nó không tồn tại. Thao tác sẽ trông giống như sau:
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
CHỈNH SỬA:
Với bản cập nhật, nó sẽ thêm khóa vào mảng nếu nó không có ở đó, nhưng nếu bạn CHỈ muốn biết liệu nó có tồn tại hay không, tôi nghĩ cách tốt nhất là sử dụng 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();
}
Để giữ nguyên bản chèn của bạn, bạn chỉ cần thay đổi Keys
tới:
Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };
Và chèn không cần phải thay đổi khác. Ngoài ra, trong bộ sưu tập của mình, bạn có thể muốn thay đổi _id
trở thành username
hoặc thêm username
trường vào tài liệu của bạn.