【问题标题】:$addToSet an object to an array in mongoose [duplicate]$addToSet 对象到 mongoose 中的数组 [重复]
【发布时间】:2015-03-08 19:22:55
【问题描述】:

我有一个存储一些产品文档的集合。文档中有一个数组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();
  })
})

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:

您可以通过声明元素的内联架构并禁用 _id 来阻止 Mongoose 将 _id 字段添加到 evaluation 数组元素:

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

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 2021-07-31
    • 2015-11-07
    • 2021-05-24
    • 2019-02-17
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多