/ / Mongoose.js: възможно ли е да промените името на ObjectId? - node.js, mongodb, mongoose

Mongoose.js: възможно ли е да промените името на ObjectId? - node.js, mongodb, mongoose

Някакъв въпрос за 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? Честно казано никога не съм опитвал мангуста :)