我有一个Mongo查询,它在Mongo控制台中返回正确的结果,但是当对Mongoose模型执行相同的查询时,它返回一个空数组。
以下行无法正常工作:
query.facilities = {$in: facilities.split(',')};
宣布我的猫鼬模型
// places
placeSchema = mongoose.Schema({
name: String,
category: [{ type: Schema.Types.ObjectId, ref: 'categories' }],
facilities: [{ type: Schema.Types.ObjectId, ref: 'facilities' }],
});
Place = mongoose.model('places', placeSchema);
// categories
categorySchema = mongoose.Schema({
name: String,
slug: String
});
Category = mongoose.model('categories', categorySchema);
facilitiesSchema = mongoose.Schema({
name: String,
});
Facility = mongoose.model('facilities', facilitiesSchema);
我/放置路线
app.get('/places', function(req, res){
var geo = req.query.geo.split(',');
if(geo.length !== 2) {
handleError('valid_geo_coords_required');
}
var limit = typeof req.query.limit !== 'undefined' ? req.query.limit : 0;
var category = req.query.category;
var facilities = req.query.facilities;
var query = {
loc: {$near: geo}
};
if(typeof category !== 'undefined') {
query.category = category;
}
if(typeof facilities !== 'undefined') {
query.facilities = {$in: facilities.split(',')}; <---- this causes the problem
}
console.log(query); // pasting this into the mongo console returns correct results
Place.find(query).limit(limit).populate('category').populate('facilities').exec(function(err, data){
if (err) return handleError(err);
res.json(data);
});
});
查询对象是:
{ loc: { '$near': [ '-3.188384', '55.94772' ] }, facilities: { '$in': [ '53012d6965b5e9a35efbb215' ] } }
这是我在控制台中执行的查询:
db.places.find({ loc: { '$near': [ '-3.188384', '55.94772' ] }, facilities: { '$in': [ '53012d6965b5e9a35efbb215' ] } })
并返回有效的文档。
Mongoose是否有特定的东西影响了这个?
更新
似乎是这条线打破了它:
facilities: [{ type: Schema.Types.ObjectId, ref: 'facilities' }],
也许是因为它是objectId的数组?
答案 0 :(得分:1)
如果该查询在Mongo shell中有效,那么facilities
集合中文档的places
数组字段必须包含字符串而不是ObjectID。
但是,根据您对places
的架构定义,Mongoose会在您的查询中将facilities
值转换为ObjectID,然后与places
中的文档不匹配,因为它包含字符串。
修复方法是将facilities
集合的文档中的places
值修改为ObjectID而不是字符串。