[已解决]mongoose的find(query, fields, options, callback){}问题
发布于 11 年前 作者 villins 15492 次浏览 最后一次编辑是 8 年前

我在Post.find(query, fields, options, function(err, results){}中,把fields设置为[’_id’]就会报500 TypeError: Invalid select() argument. Must be a string or object.

 exports.index = function(req, res, next){
var current_page = parseInt(req.query.page, 10) || 1;
var limit = 15;
var render = function(posts, pages){
	res.render('index', {
		posts: posts,
	});
}
var proxy = new EventProxy();
proxy.assign('posts', render);
var where = {};
var options = {skip: 0, limit: limit, sort: {create_at: 1}};
postCtrl.find_posts_by_query(where, options, function(err, posts){
	if(err){
		return next(err);
	}
	proxy.trigger('posts', posts);
});

}

exports.find_posts_by_query = function(where, options, callback){
Post.find(where, ['_id'], options, function(err, results){
	if(err){
		return callback(err, null);
	}
	if(results.length == 0){
		return callback(err, []);
	}
	var posts_id = [];
	for(var i = 0; i < results.length; i++){
		posts_id.push(results[i]._id);
	}
	var proxy = new EventProxy();
	var done = function(){
		return callback(null, posts);
	}

	var posts = [];
	proxy.after('posts.ready', posts_id.length, done);
	var where = {};
	for(var i = 0; i < posts_id.length; i++){
		(function(i){
			where = {_id: posts_id[i]};
			find_post_by_query_once(where, function(err,post, author){
				if(err){
					callback(err);
				}
				post.author = author;
				proxy.trigger('posts.ready');
			});
		})(i);
	}
});

}

原因是fields不是数组而是字符串,多字段用空格分隔

1 回复

嗯,字段前面加-表示非

回到顶部