Mongoose $ push添加到文档中

时间:2018-02-14 14:44:20

标签: mongodb mongoose

我试图将元素添加到现有数组中,但它会产生错误:

The field 'data' must be an array but is of type object in document 

方案:

const testScheme = new Schema({
  user: {
    type: String,
    required: true
  },
  data: [{
    platform: {
      type: String,
      required: true
    },
    item_name: {
      type: String,
      required: true
    },
    price: {
      type: Number,
      default: 0
    },
    updatedAt: Date
  }]
}, {
  versionKey: false,
  timestamps: true
});

mongodb中的文档:

"data": [{
        "price": 50,
        "_id": "5a84268d6c78a60c10479437",
        "platform": "pl1",
        "item_name": "test"
    }],
    "_id": "5a841bccb44cb8cd5b974d71",
    "user": "Ivan",
    "updatedAt": "2018-02-14T12:07:41.793Z",
    "createdAt": "2018-02-14T11:21:48.104Z"

查询:

var item = {
    "platform": "pl700",
    "item_name": "someText",
    "price": 700,
    "updatedAt": new Date()
  };
  Data.findOneAndUpdate({
      'user': 'Ivan'
    }, {
      $push: {
        'data': item
      }
    }, {
      safe: true,
      upsert: true
    },
    function(err, data) {
      if (err) return res.status(500).send({
        'error': err
      });
      res.status(200).send({
        'data': data
      });
    }
  );

我尝试使用$ set parametr进行查询并且它有效,但$ push,$ addToSet对我没有用。此外,我试图谷歌这个问题,无法解决它。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您打算做什么。

要将项目推送到数组,请使用$addToSet/$push。要更新数组,请使用$set

使用$set您可以更新整个文档,也可以更新特定字段。

更新整个文档

Data.findOneAndUpdate({
      'user': 'Ivan',
      'data._id':item._id
    }, {
      $set: {
        'data.$': item
      }
    }...
)

更新特定字段

Data.findOneAndUpdate({
       'user': 'Ivan',
       'data._id':item._id
     }, {
       $set: {
       'data.$.price': item.price
       }
    }...
)