【问题标题】:Mongoose Db: How can I use a parameterized method in a Mongoose query?Mongoose Db:如何在 Mongoose 查询中使用参数化方法?
【发布时间】:2013-01-17 18:24:04
【问题描述】:
var mongoose = require('mongoose'),
    Schema = mongoose.Schema, 
    ObjectId = Schema.ObjectId;

var Group = new Schema({
    name: { type: String, required: true },
    members: [{ type: ObjectId, ref: 'User' }],
    leader: { type: ObjectId, ref: 'User' },
    // more fields to filter by
});


Group.method('role', function (user) {
    if (this.leader === user) return "Leader";
    else if (this.members.indexOf(user) >= 0) return "Member";
    else return "Non-Member";
});

我是 Mongoose 新手,我的第一个真正的查询是一个棘手的问题。我需要选择一组组显示组名和当前用户的角色(user_id 存储在会话变量中)。

我可以在 Mongoose 选择查询中使用“角色”方法吗?

也许我应该使用自定义节点流并在那里实现角色方法?

我注意到我的条件 (this.leader === user) 或 (this.members.indexOf(user) >= 0) 是正确或有效的。我需要避免为每个 Group 文档加载 User 对象。

需要代码示例。

感谢您的帮助!

【问题讨论】:

  • 或许这应该使用 map-reduce 来实现?
  • 也许这应该使用 map-reduce 来实现,并生成一个由 user_id 索引的集合,该集合跟踪用户领导或成员的组。成员资格很少改变,所以这可能是最好的方法。

标签: mongodb mongoose


【解决方案1】:

你要使用的是聚合框架

http://docs.mongodb.org/manual/applications/aggregation/

您可能需要深入了解此查询的本机驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2021-11-19
    • 2015-07-22
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多