Использование самоопределенного ObjectId и избежание двойных записей в Mongoose - PullRequest
6 голосов
/ 06 апреля 2011

Я получаю объекты JSON через внешний API в node.js и хочу сохранить их в MongoDB.Я определил модель следующим образом:

var Product = new Schema({
        id: ObjectId,
    name: String});

И теперь я пытаюсь сохранить объект:

JSONProduct = { id: 1234, name: 'The Foo Bar' };
product = new Product(JSONProduct);
product.save();

Объект прекрасно хранится в коллекции "products", ноидентификатор из JSONProduct заменяется значением, созданным MongoDB:

{ "id" : ObjectId("119894980274616772006500"), "name" : "The Foo Bar" }

Основная причина, по которой я хочу использовать свой идентификатор продукта над созданным MongoDB, заключается в том, что я хочу предотвратитьповторяющиеся записи для продуктов.Я получаю объекты JSON Product через вызов cronjob во внешнем API, включая уже существующие.Может быть, есть другой, лучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 17 апреля 2011

Вы определяете поле как ObjectID, но назначаете ему номер.Чтобы создать ObjectID, вам нужно сделать что-то вроде:

new ObjectId('something');

Однако в вашем случае это, вероятно, не лучшая идея.Определите вашу модель следующим образом:

var Product = new Schema({
  external_id: {type: Number, unique: true},
  name: {type: String},
});

В поле можно указать unique, чтобы создать уникальный индекс для этого поля.

0 голосов
/ 07 июля 2014

В вопросе, который вы упомянули,

Объект прекрасно хранится в коллекции "products", но идентификатор из JSONProduct заменяется значением, созданным MongoDB: {"id": ObjectId ("119894980274616772006500"), "name": "The Foo Bar"}

Но я думаю, что он создан как:

{"_id": ObjectId ("119894980274616772006500"), "name": "The Foo Bar"}

Кроме того, вы можете передать свой идентификатор продукта в поле с именем "_id", тогда mongo не будет создавать отдельные идентификаторы и не будет принимать повторяющиеся значения, и для этого поля будет автоматически выполняться индексация.

Но убедитесь, что вы отправили уникальные значения идентификатора продукта в _id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...