node.js - 使用 Mongoose 从文档中删除数组元素

标签 node.js mongodb express mongoose

我有一个名为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

但是文档没有更新。

最佳答案

您使用 $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) {

  }
)

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

关于node.js - 使用 Mongoose 从文档中删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44342181/

相关文章:

node.js - 从 JSON 模块加载 Nest.js 应用程序的端口号

node.js - cookie node.js express

node.js - Mongoose - foreach 循环与聚合结果

ios - 安全文件直接上传到 s3 或服务器到 s3(从 iOS 应用程序)

php_mongo 扩展已经安装了,但是为什么 rockmongo 仍然没有连接?

javascript - 如何使用 Express 从一个端点发送多个查询?

javascript - Node.js & Express.js/Jade res.render 返回 res.render 不是函数

javascript - MongoDB更改数组的顺序

node.js - Sails.js 与 Mongo 无法通过 _id 找到

node.js - Node.js 中的安全性