Когда использовать новый ObjectId ("string-id") над ObjectId ("string-id") в Mongoose? - PullRequest
0 голосов
/ 27 декабря 2018

Поскольку я хочу соответствовать своему коду (Node.js)

Когда у меня есть запрос и мне нужно что-то искать, используя значение id, которое является уникальным объектом, каков наилучший способпреформ это?

User.findOne({id: new ObjectId("82jf20k2k...")}...

ИЛИ

User.findOne({id: ObjectId("82jf20k2k...")}...

Кажется неправильным создавать новый экземпляр и каждый раз заполнять память объектами.

Единственное разумное время, используя new ObjectId - это когда при вставке данных для всех других операций я бы использовал ObjectId ?

Ответы [ 4 ]

0 голосов
/ 27 декабря 2018

Я бы предложил вам использовать Model.findById() вместо Model.findOne(_id:id), чтобы найти документ, основанный на _id.

Вы также можете найти дополнительную информацию по Документация Mongoose .

0 голосов
/ 27 декабря 2018

вы можете использовать его следующим образом:

User.findOne({ id: "82jf20k2k..." })

нет необходимости в "ObjectId ()", так как findOne попытается преобразовать строку в ObjectId.

Также, если вы хотитечтобы искать документы по Id, используйте findById, как это более предпочтительно.

Ссылка: mongoose model.js из Github

0 голосов
/ 27 декабря 2018

Проверка исходного кода :

/**
* Create a new ObjectID instance
*
* @class
* @param {(string|number)} id Can be a 24 byte hex string, 12 byte binary string or a Number.
* @property {number} generationTime The generation time of this ObjectId instance
* @return {ObjectID} instance of ObjectID.
*/
var ObjectID = function ObjectID(id) {
  // Duck-typing to support ObjectId from different npm packages
  if (id instanceof ObjectID) return id;
  if (!(this instanceof ObjectID)) return new ObjectID(id);

  this._bsontype = 'ObjectID';

  // more code

То, что я вижу, это то же самое, что делает new или ObjectId("82jf20k2k..."), как будто это не экземпляр ObjectIDон собирается создать новый экземпляр и вернуть его.

0 голосов
/ 27 декабря 2018

Вы должны использовать 2-й вариант, т.е.

User.findOne ({id: ObjectId ("82jf20k2k ...")} ...

вы правыПервый - создание ненужного объекта в памяти. Необходимо использовать новое ключевое слово , если вы хотите сгенерировать ObjectID во время выполнения.

...