$ addToSet一个对象到一个数组在mongoose

我有一个存储一些产品文件的集合。 在文档中,有一个数组evaluation来存储用户对产品的价格评估对象。

这里是一个用户对象的例子:

 var data = {user_id:90,price:400} 

任何人都可以告诉我,如果有可能在evaluation数组上做一个“插入重复更新”? 我已经尝试了$addToSet ,但是当一个对象被推入evaluation ,有一个_id属性被添加到用户对象,即使我没有在模型中,像这样:

 { "_id": 54b13f52604fc5d242d4aa68, "__v": NumberInt(0), "evaluation": [ { "price": NumberInt(14616), "user_id": NumberInt(91), "_id": ObjectId("54b13f5e604fc5d242d4aa6b") // Why is it added? }, { "price": NumberInt(16211), "user_id": NumberInt(92), "_id": ObjectId("54b140d1604fc5d242d4aa74") // } ], "product": [ { "title": "ABC", "model_id": "382", "id": "513", "category": "1", "src": "xxx.jpg" } ], "timestamp":ISODate("2015-01-10T15:03:46.310Z") } 

那是$addToSet如何使用id字段来检查重复的对象吗?

model.js

 var evaluation = new mongoose.Schema({ product:[], timestamp : { type : Date, default: Date.now }, evaluation:[{user_id:Number,price:Number}], },{strict:false}); var models = { Eva:mongoose.model('Evaluation',evaluation) }; 

app.js

 var mongo_models = require('./db/mongo_model')(mongoose); Eva = mongo_models.Eva; io.on('connection', function(socket){ socket.on("evaluation",function(d){ var data = {user_id:user_id,price:d.price}; Eva.update({_id:d.tid},{$addToSet:{evaluation:data}}).exec(); }) }) 

您可以通过声明元素的内联模式并禁用_id来防止Mongoose向evaluation数组元素添加_id字段:

 var evaluation = new mongoose.Schema({ product:[], timestamp : { type : Date, default: Date.now }, evaluation:[Schema({user_id:Number,price:Number}, {_id: false})], },{strict:false});