2016-04-02 103 views
0

我定義爲用戶架構如下:發行貓鼬查詢上無人居住的子文檔

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

我認爲這是因爲我的UserSchemablogs數組實際上是ObjectID的數組。我該如何做這項工作?

+1

的可能的複製[?如何查詢MongoDB中引用的對象(http://stackoverflow.com/questions/9621928/how-do-i-query參考的對象功能於mongodb的) –

回答

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); 
    }); 
});