在未填充的子文档上发出mongoose查询

时间:2016-04-02 07:06:45

标签: node.js mongodb mongoose

我有一个用户Schema定义如下:

var UserSchema = new mongoose.Schema({
  username: {type: String, lowercase: true, unique: true},
  blogs: [{type: mongoose.Schema.Types.ObjectId, ref: 'Blog'}],
});

博客架构如下:

var BlogSchema = new mongoose.Schema({
    name: String,
    owner: {type: mongoose.Schema.Types.ObjectId},
});

我想要做的是发出一个find查询,给定一个字符串q,将查找其用户名包含q或者至少有一个名称包含q的博客的所有用户。

到目前为止,这是我的代码:

User.find({
            $or: [ {username:{$regex: q, $options: 'i'}}, 
                {blogs:{ $elemMatch: {name: {$regex: q, $options: 'i'}}}}]
        })
        .exec(function(err,users){
            if (err) {return next(err);}
            res.json(users);
        });

但是上述方法不起作用。如果我有一个用户lizard,博客为TheReptilian,那么使用“rep”作为q参数不会显示lizard

我认为这是因为我blogs的{​​{1}}数组实际上是ObjectID的数组。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

使用两步查询:

Blog.find({name: {$regex: q, $options: 'i'}).exec(function(err, blogs){
    if (err) {return next(err);}
    User.find({
        $or: [ {username:{$regex: q, $options: 'i'}}, 
            {blogs:{ $in: blogs} }]
    }).exec(function(err,users){
        if (err) {return next(err);}
        res.json(users);
    });
});