node.js - 无法更新 mongo 文档中的嵌入项目(无方法更新)

标签 node.js mongodb mongoose

我有一个看起来像这样的 Mongoose 模式,我可以很好地更新和查询:

// Subscriber Schema
var Subscriber = new Schema({
    'user': ObjectId,
    'level': { type: String, enum: [ 'sub', 'poster', 'blocked' ] }, //blocked means users has opted out of list
    'dateAdded': { type: Date, default: Date.now }
});

// Group Schema
var Group = new Schema({
    'groupEmail': { type: String, lowercase: true, validate: [validatePresenceOf, 'an email is required'], index: { unique: true } },
    'groupOwner': ObjectId,
    'groupName': String,
    'twitterFeed': String,
    'subscribers': [Subscriber],
    'createdAt': { type: Date, default: Date.now }
});

我正在尝试更新组文档中的订阅者,并更改其级别,然后保存更改。我可以使用以下方法找到该组:

Group.findOne({ _id: req.params.groupId }, function(err, g)

建立群组后,我想找到一个订阅者,以便可以更新它。如果我尝试:

g.subscribers.update({ 'user': req.params.userId }, { level: newStatus });

我得到:

TypeError: Object { user: 4fc53a71163006ed0f000002,
  level: 'sub',
  _id: 4fd8fa225904a5451c000006,
  dateAdded: Wed, 13 Jun 2012 20:37:54 GMT },{ user: 4fda25ac00cd9bdc4f000004,
  level: 'sub',
  _id: 4fda270bbce9f8d058000005,
  dateAdded: Thu, 14 Jun 2012 18:01:47 GMT },{ user: 4fda2a634499dfd16e00000d,
  level: 'sub',
  _id: 4fda2a634499dfd16e00000e,
  dateAdded: Thu, 14 Jun 2012 18:16:03 GMT } has no method 'update'

我尝试过更新、查找等各种排列,但总是收到“没有方法”错误。我究竟做错了什么?我应该以不同的方式更新 Subscriber.level 吗?

谢谢!!

最佳答案

@eltoro 基本上是正确的,数组没有 update 方法,使用 Group.update 的建议是一个很好的方法,但更新语法缺少 subscribers.$.level 中的 $

Group.update(
    {_id: req.params.groupId, 'subscribers.user': req.params.userId}, 
    { 'subscribers.$.level': newStatus }, function(err, result) {}
);

关于node.js - 无法更新 mongo 文档中的嵌入项目(无方法更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11040591/

相关文章:

node.js - 在 Ubuntu 上安装 React Native 初学者工具包期间,spawn-sync 安装后失败

javascript - 如何在 Electron 中正确加载 lit-html 模块

javascript - 分离的 node.js 应用程序中的 Redis 客户端

javascript - 模块对象的路径属性?

java - 在 Java MongoDb 中,如何将特定字段的值保存在 ArrayList 中?

javascript - 与 mongoose 类似的搜索文本(就像 sql 我们可以使用 like 查询)

python - Mongo 边界框查询(带限制)

node.js - 如何用mongoose实现分页和总计

javascript - 如何修复 Model.findByIdAndUpdate() 返回属性 null

javascript - 如何在 Mongoose 中使用 "find()"填充字段?