【发布时间】:2017-03-12 08:39:45
【问题描述】:
我有一个具有以下数据结构的users 表:
[{
userID: 0,
username: 'test0',
petsForSale: [
{ type: 'fish' },
{ type: 'cats' }
],
seekingPets: [
{ type: 'dogs' },
{ type: 'birds' }
]
},
{
userID: 1,
username: 'test1',
petsForSale: [
{ type: 'guinea pigs' },
{ type: 'dogs' },
{ type: 'hamsters' }
],
seekingPets: [
{ type: 'ferrets' }
]
}]
我正在尝试执行一个GET,它根据petsForSale 和seekingPets 返回匹配的用户。例如,如果用户正在销售dogs,则他们将显示在seekingPets 中任何具有dogs 的用户的匹配结果列表中。我很接近,这是我到目前为止的路由器代码:
router.get('/:id/findmatches', function(req, res) {
var db = req.db;
var collection = db.get('users');
var uid = req.params.id;
//var seeking_pets = collection.find({ userID: uid }, { seekingPets: 1 });
//var seeking_pets = collection.find({ userID: uid }, { seekingPets: { type: 1 }});
var seeking_pets = [ 'dogs', 'birds' ]; // *Hard-coded is the only way I can get it to work
collection.find({ petsForSale: { $elemMatch: { type: { $in: seeking_pets }}}}, function(e, docs) {
res.json(docs);
});
});
此代码可以编译并与硬编码的seeking_pets 一起正常工作 - 访问/users/0/findmatches 按预期返回用户test1。我被困在从请求中的userID 中提取seekingPets 的列表并在collection.find 中搜索它。这两条注释线是我尝试过的但没有成功。我还尝试将collection 转换为array。
【问题讨论】:
-
为什么不使用 $and 运算符同时查询这两个条件?
标签: javascript arrays node.js mongodb express