我通过node.js中的外部API获取JSON对象,并希望将它们存储在MongoDB中。我定义了这样一个模型:
var Product = new Schema({
id: ObjectId,
name: String});
现在我正在尝试存储一个对象:
JSONProduct = { id: 1234, name: 'The Foo Bar' };
product = new Product(JSONProduct);
product.save();
对象在“products”集合中存储得很好,但 JSONProduct 中的id被MongoDB创建的值替换:
{ "id" : ObjectId("119894980274616772006500"), "name" : "The Foo Bar" }
我想在我创建的MongoDB上使用我的产品ID的主要原因是,我想防止产品的重复条目。我通过外部API上的cronjob触发调用获取JSON Product对象,包括已经存在的API。也许有另一个更好的方法来做到这一点?
答案 0 :(得分:5)
您正在将字段定义为ObjectID,但您要为其分配一个数字。要创建ObjectID,您需要执行以下操作:
new ObjectId('something');
然而,在你的情况下,这可能不是最好的主意。像这样定义你的模型:
var Product = new Schema({
external_id: {type: Number, unique: true},
name: {type: String},
});
您可以在字段上指定unique
以为该字段创建唯一索引。
答案 1 :(得分:0)
在你提到的问题中,
该对象在"产品中存储良好"集合,但来自JSONProduct的id被MongoDB创建的值替换: {" id" :ObjectId(" 119894980274616772006500")," name" :" Foo Bar" } 强>
但我认为它创建为:
{" _id" :ObjectId(" 119894980274616772006500")," name" :" Foo Bar" } 强>
此外,您可以通过名称" _id"将您的商品ID传递到字段,然后mongo不会创建任何单独的ID,并且它不会接受重复的值并且它会有为该字段自动编制索引。
但请确保将产品ID的唯一值推送到_id。