mongodb - 在 Mongoose 中使用自定义的 ObjectId 并避免重复输入

标签 mongodb node.js mongoose

我通过 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 触发调用(包括已经存在的 API)获取 JSON Product 对象。也许还有另一种更好的方法来做到这一点?

最佳答案

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

new ObjectId('something');

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

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

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

关于mongodb - 在 Mongoose 中使用自定义的 ObjectId 并避免重复输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558400/

相关文章:

mongodb - Meteor - "findOne"函数不再回调

python - Windows 上的 Electron 重建串行端口错误

node.js - 创建一个全局可访问的 node.js 模块

javascript - Mongoose 找到一个并推送到文档数组

couchdb - 设计文档数据库架构

mysql - 我应该使用 MongoDB 进行网站电子邮件营销吗?

node.js - Express-Module-Function 中的 Sequelize 查询

Node.JS Express 4 - Mongoose 不保存数据

javascript - 在 Mongoose 之上创建一个额外的数据访问层

java - 从java连接到mongodb时如何防止登录控制台?