6

我通过 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();

该对象很好地存储在“产品”集合中,但JSONProduct中的 id 被 MongoDB 创建的值替换:

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

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

4

2 回答 2

5

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

new ObjectId('something');

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

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

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

于 2011-04-17T17:18:47.753 回答
0

在你提到的问题中,

该对象存储在“产品”集合中,但 JSONProduct 中的 id 被 MongoDB 创建的值替换:{“id”:ObjectId(“119894980274616772006500”),“name”:“Foo Bar”}

但我认为它被创建为:

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

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

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

于 2014-07-07T14:33:12.597 回答