Прямо сейчас в моем проекте я использую Play framework (JAVA) и Mongodb. В моей коллекции есть два поля: хэш и адрес. Обратите внимание, что поле адреса является объектом.Как избежать дублирования записи объекта в Mongodb?
Моя коллекция выглядит следующим образом:
db.hashed.find()
{ "_id" : ObjectId("55f04cd0d4c68ef1211e6ee4"), "hash" : "1axuhWcqKB", "address" : { "floor" : 0, "block" : "5", "city" : "Mumbai", "state" : "ABC", "pincode" : 0, "latitude" : "77.6876", "longitude" : "13.57558", "hash" : "1axuhWcqKB" } }
{ "_id" : ObjectId("55f04cd1d4c68ef1211e6ee6"), "hash" : "1ay4P407qF", "address" : { "floor" : 0, "block" : "5", "city" : "Mumbai", "state" : "ABC", "pincode" : 0, "latitude" : "77.6876", "longitude" : "13.57558", "hash" : "1ay4P407qF" } }
{ "_id" : ObjectId("55f04cd2d4c68ef1211e6ee8"), "hash" : "1ayDn3Zemh", "address" : { "floor" : 0, "block" : "5", "city" : "Mumbai", "state" : "ABC", "pincode" : 0, "latitude" : "77.6876", "longitude" : "13.57558", "hash" : "1ayDn3Zemh" } }
Сейчас я думаю о, как избежать дублирования записей адресов, которые, очевидно, не должны получить вставленные в базе данных. Я попытался сделать securityindex над полем адреса, но похоже, что это не то, что решит эту проблему.
> db.users.ensureIndex({"address" : 1},{unique: true})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 2,
"note" : "all indexes already exist",
"ok" : 1
}
Надеюсь, кто-то может помочь мне в этом.
Благодарим за отзыв. Значит ли это, что я никогда не смогу проверять дубликаты на уровне базы данных, похоже, что я должен делать это только через код? Возможно, вы можете прокомментировать это: – murasing
Вы можете проверить дубликаты, изменив свой индекс на что-то вроде: users.ensureIndex ("{address.floor: 1, address.block: 1, address.city:1," + \t \t "address.state: 1, address.pincode: 1, address.latitude: 1," + \t \t "address.longitude: 1}", "{имя: \" unique_address \», уникальный: истинный} «); – rsutormin
Я лучше уточню свой ответ ... Сделано. – rsutormin