使用自定义的ObjectId并避免Mongoose中的双重条目

Tho*_*mas 6 mongoose mongodb node.js

我通过node.js中的外部API获取JSON对象,并希望将它们存储在MongoDB中.我定义了这样的模型:

var Product = new Schema({
        id: ObjectId,
    name: String});
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试存储一个对象:

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

该对象在"products"集合中存储得很好,但是JSONProduct中的id 被MongoDB创建的值替换:

{ "id" : ObjectId("119894980274616772006500"), "name" : "The Foo Bar" }
Run Code Online (Sandbox Code Playgroud)

我想在MongoDB中使用我的产品ID的主要原因是,我希望防止产品的重复条目.我通过外部API上的cronjob触发调用获取JSON Product对象,包括已经存在的API.也许有另一个更好的方法来做到这一点?

kcb*_*ner 5

您正在将字段定义为ObjectID,但您要为其分配一个数字.要创建ObjectID,您需要执行以下操作:

new ObjectId('something');
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,这可能不是最好的主意.像这样定义你的模型:

var Product = new Schema({
  external_id: {type: Number, unique: true},
  name: {type: String},
});
Run Code Online (Sandbox Code Playgroud)

您可以unique在字段上指定为该字段创建唯一索引.