2015-11-07 45 views
0

搜索我已经从角fullstack自耕农发生器产生的角fullstack应用程序,我有一个查询模型如下:如何在子文档

'use strict'; 

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

/** 
* Discussion Question Schema 
*/ 
var QuerySchema = new Schema({ 
    date: { 
     type: Date, 
     default: Date 
    }, 
    tags: [{ 
     type: Schema.ObjectId, 
     ref: 'Tag' 
    }] 
}); 

module.exports = mongoose.model('Query', QuerySchema); 
var deepPopulate = require('mongoose-deep-populate')(mongoose); 

Tag具有场text。现在在我的查询控制我有深深的填充某些其他领域和分页他们的话,我想是这样的控制器功能:

exports.index = function(req, res) { 
    var escapeRegExpChars = function (text) { 
     return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 
    }; 
    require('paginate-for-mongoose'); 
    var limit,page; 
    if(req.query.limit != undefined) limit = req.query.limit; 
    else limit = 10; 
    if(req.query.page != undefined) page = req.query.page; 
    else page = 1; 
    var queryObj = {}; 
    if(req.query.searchText != undefined && req.query.searchText != '') 
     queryObj['title']= new RegExp(escapeRegExpChars(req.query.searchText), 'i'); 
    var options = { 
     perPage:limit, 
     delta:2, 
     page:page 
    }; 
    if(req.query.fold !=undefined && req.query.fold != '') queryObj["tags.text"] = req.query.fold; 
    var query = Query.find(queryObj).populate('tags','text').deepPopulate('user class user.class'); 
    query.paginate(options,function(err, resp){ 
     if(err) { return handleError(res, err); } 
     if(req.query.fold) console.log(resp.results); 
     return res.status(200).json(resp.results); 
    }); 
}; 

如何搜索查询与tags.text值完全作为req.query.fold价值?

回答

0

的MongoDB不支持连接,以便对链接的文档搜索,你必须做的两个步骤:

// First look up the _id of the tag 
Tags.findOne({text: req.query.fold}, function(err, tag) { 
    if (tag) { 
     // Add a match in the doc's tags array to the tag's _id 
     queryObj.tags = tag._id; 
     var query = Query.find(queryObj)... 
     ... 
    } 
});