我有一个用户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的数组。我怎样才能做到这一点?
答案 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);
});
});