node.js - Mongoose 静态方法填充数组

标签 node.js mongoose where-clause mongodb-query mongoose-populate

我有一个 Mongoose 模式,例如:

var postSchema = new Schema({
    ...
    tags : [{ type: Schema.Types.ObjectId, ref: 'Tag' }]
});

我正在尝试实现一个静态方法,该方法返回具有特定标签的帖子。像这样的东西:

postSchema.statics.searchByTag = function searchByTag (tag, cb) {
  return this.find().populate('tags')
             .where("tags contains the element tag")
             .exec(cb);
};

问题:

  1. 我可以在静态方法中使用 populate 吗?
  2. 检查“tags”是否包含“tag”的最佳方法是什么?

感谢您的帮助。

最佳答案

这就是我的答案/解决方案: 1)是的,填充在静态方法中起作用; 2)这就是我解决问题的方法,可能不是最有效的方法,但它有效:

postSchema.statics.searchByTag = function searchByTag (tagId, cb) {
    var Posts = [];
    this.find({})
    .populate('author tags')
    .exec(function(err,posts){
    if(err){
        cb(err);
    }else{
        posts.forEach(function(post){
        post.tags.forEach(function(tag){
            if(new String(tag._id).valueOf() == new String(tagId).valueOf()){
            Posts.push(post);
            }
        });         
        });
        cb(null,Posts);
    }
    });
}

关于node.js - Mongoose 静态方法填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27113599/

相关文章:

javascript - Node.js require() 与 RequireJS?

node.js - Node Js 如何将消息广播到有空间的命名空间

arrays - 用类实例填充数组

node.js - 缩进无效,可以使用制表符或空格,但不能同时使用 jade

mysql - WHERE 子句如何工作(互换 LHS 和 RHS)

mysql - 查询给出错误结果

mongodb - 如何在寻找嵌入式文档的 Mongoose 中执行更新插入?

node.js - 如何访问文本分数 MongoDB $文本搜索

node.js - Mongoose - 如何根据另一个字段更改 TTL?

sql - Where 子句取决于变量的值