2011-04-05 98 views
5

我通过node.js中的外部API获取JSON对象,并且希望将它们存储在MongoDB中。我定义这样一个模型:使用自定义的ObjectId并避免Mongoose中的重复条目

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

而现在我试图存储对象:

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

的对象存储精细的“产品”集合,但是从的ID

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

主要的原因我想用我的产品ID在MongoDB中创建一个是,我要防止措施:JSONProduct由MongoDB的创造价值取代t重复产品的条目。我通过外部API(包括现有的API)的cronjob触发调用来获取JSON Product对象。也许有另一种更好的方法来做到这一点?

回答

5

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

new ObjectId('something'); 

但是,对您而言,这可能不是最好的主意。定义你的模型是这样的:

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

您可以在字段中指定unique创建该字段的唯一索引。

0

在你提到的问题,

的对象存储精细的“产品”集合,但是从JSONProduct ID是一个MongoDB的创造价值所取代: {“ID”:物件( “119894980274616772006500”), “名”: “foo的酒吧”}

但我认为它是作为创建:

{ “_id”:物件( “119894980274616772006500”), “名” :“The Foo Bar”}

此外,您可以通过名称“_id”将您的产品ID传递给字段,那么mongo不会创建任何单独的ID,并且它不会接受重复的值,并且会为该字段自动创建索引。

但请确保您将产品ID的唯一值推送到_id。