使用Mongoose

时间:2017-06-03 08:57:13

标签: node.js mongodb express mongoose

我有一个名为 ReferralHistory 的架构。 它包含一组用户和引用用户数组。

ReferralHistory

var mongoose = require('mongoose');
var refferalHistorySchema = new mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User',
        unique: true
    },

    referrals: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }],
});
var ReferralHistoryModel = mongoose.model('ReferralHistory', refferalHistorySchema);
module.exports = {
    referralHistory: ReferralHistoryModel
}

我需要从集合中引用数组删除特定用户ReferralHistory [这里我只知道推荐用户的ID]。我怎样才能实现这个目标?

修改

集合 enter image description here

我试过

db.referralhistories.update({ "u_referrals": "593281ef966d7f0eeb94db3d" }, { "$pull": { "u_referrals": "593281ef966d7f0eeb94db3d" } });

O / P enter image description here

但是文档没有更新。

1 个答案:

答案 0 :(得分:4)

您将$pull运算符与.update()一起使用。因此,假设referredId为您所知道的值

ReferralHistoryModel.update(
  { "referrals": referredId },
  { "$pull": { "referrals": referredId } },
  { "multi": true },
  function(err,status) {

  }
)

注意{ "multi": true }表示更新可以应用于集合中的多个匹配文档。如果您真的只想匹配和更新一个文档,那么您不会包含该选项,因为只更新第一个匹配是默认值。

如果您想要更具体并且还要匹配“用户”,那么您可以这样做:

ReferralHistoryModel.update(
  { "user": userId, "referrals": referredId },
  { "$pull": { "referrals": referredId } },
  { "multi": true },
  function(err,status) {

  }
)

然后匹配需要存在两个值,而不是与您提供的ReferralhistoryModel匹配的任何 referredId文档。