2011-04-05 7 views
5

Obtengo objetos JSON a través de una API externa en node.js y quiero almacenarlos en MongoDB. He definido un modelo como este:Usando un ObjectId autodefinido y evitando las entradas dobles en Mongoose

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

Y ahora estoy tratando de almacenar un objeto:

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

El objeto se almacena bien en la colección "productos", pero el ID de la JSONProduct se sustituye por un valor MongoDB creado:

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

la razón principal por la que quiero usar mi Identificación del producto sobre el MongoDB creado uno es, que quiero PREVEN t entradas duplicadas para productos. Obtengo los objetos del Producto JSON a través de una llamada activada por cronjob en una API externa, incluidas las ya existentes. Tal vez hay otra forma mejor de hacer esto?

Respuesta

5

Está definiendo un campo como un ObjectID, pero le está asignando un número. Para crear un ID de objeto que hay que hacer algo como:

new ObjectId('something'); 

Sin embargo, en su caso, probablemente no sea la mejor idea. Definir su modelo así:

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

Puede especificar unique en un campo para crear un índice único para ese campo.

0

En la pregunta que usted ha mencionado,

El objeto se almacena bien en los "productos" colección, pero el ID de la JSONProduct se sustituye por un valor MongoDB creado: { "id": OBJECTID ("119894980274616772006500"), "name": "el Foo bar"}

Pero creo que el que se crea como:

{ "_id": oBJECTID ("119894980274616772006500"), "nombre" : "The Foo Bar"}

Además, puede pasar su id. De producto al campo por el nombre "_id", luego mongo no creará ningún ID por separado y no aceptará valores duplicados e indexará automáticamente para ese campo.

Pero asegúrese de enviar valores únicos del ID del producto a _id.

Cuestiones relacionadas