使用 Mongoose 从文档中删除数组元素

Muh*_*sin 1 mongoose mongodb node.js express

我有一个名为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
}
Run Code Online (Sandbox Code Playgroud)

我需要从集合 ReferralHistory [在这里我只知道被推荐用户的 id] 中的推荐数组中删除特定用户。我怎样才能做到这一点?

编辑

收藏 在此处输入图片说明

我试过

db.referralhistories.update({ "u_referrals": "593281ef966d7f0eeb94db3d" }, { "$pull": { "u_referrals": "593281ef966d7f0eeb94db3d" } });
Run Code Online (Sandbox Code Playgroud)

开/关在此处输入图片说明

但是文档没有更新。

Nei*_*unn 8

您将$pull运算符与.update(). 所以假设referredId你知道的价值

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

  }
)
Run Code Online (Sandbox Code Playgroud)

请注意这{ "multi": true }意味着更新可以应用于集合中的多个匹配文档。如果您真的只想匹配和更新一个文档,那么您就不要包含该选项,因为默认情况下仅更新第一个匹配项。

如果您想更具体并且还需要匹配“用户”,那么您可以执行以下操作:

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

  }
)
Run Code Online (Sandbox Code Playgroud)

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