Някакъв въпрос за mongo ObjectId в мангуста
1) Може да бъде ObjectId поле от име не като _id? И как да го направя? Когато правя в моя код:
MySchema = new mongoose.Schema({
id : mongoose.Schema.ObjectId
});
не променя нищо.
2) Ако имам полето objectId, наречено _id, е възможно да се върнете от друго име за това поле (например само "id" - да го изпратите в отговор в уеб);
3) И въпрос само за разбиране: защо ObjectId _id полето достъпно чрез "id" собственост не "_id"?
Благодаря, Алекс
Отговори:
2 за отговор № 1Елементът "_id" е част от mongodbархитектура, която гарантира, че всеки документ в колекцията може да бъде уникално идентифициран. Това е особено важно, ако използвате sharding, за да разрешите уникален идентификатор в отделна машина. Затова това е дизайнерски избор, така че няма начин да го хванете :)
Стойността по подразбиране за _id се генерира по следния начин:
- клеймото
- хеш на името на машината
- на процеса на генериране
- увеличение
но можете да използвате каквато и да е стойност, която искате толкова дълго, колкото е уникална.
Ако е по-лесно да помислите за _id на нещо, което трябва да е там, но наистина не се интересувате от :) Просто оставете системата да го генерира автоматично и използвайте свой собствен идентификатор.
Така че, ако все още искате да създадете свой собствен "id", изпълнете нещо подобно:
db.mySchema.ensureIndex({"id": 1}, {"unique" : true})
но се уверете, че е наистина уникален и не противоречи на използвания от вас API.
2) Преименувайте го в приложението, точно преди да го изпратите като уеб отговор.
3) Мисля, че това се дължи на API, който използвате. Може би авторът е установил, че е по-логично да върне id вместо _id? Честно казано никога не съм опитвал мангуста :)