我是一名mongodb新手,非常感谢下面介绍的这个问题的帮助。
我有两个系列“用户”和“包”。用户集合方案具有{username,firstname,lastname},并且包集合模式具有{username,bagname,bagimage}。
在获取用户包时,我还想显示名字和姓氏。我的问题是我似乎无法正确构建查询。我正在使用nodejs和mongojs驱动程序。以下是我提取所有行李的问题
thmConfig.db.bags.find({status: "1"}).sort({$natural:-1}, function(err, data)
{
var bagList = '{"bags":[';
if( err || !data) res.send('[{"status": "0"}]');
else data.forEach( function(innerData) {
console.log(innerData.username);
bagList += JSON.stringify(innerData)+",";
/*
This is where I would lke to also append the firstname from the
users collection
*/
});
console.log(bagList.slice(0,1));
res.write(magList.slice(0,-1));
res.end(']}');
});
我非常感谢任何关于此的帮助或指示。我没有选择更改驱动程序,所以我特别想要使用mongojs来实现它。
谢谢和问候, Titash
答案 0 :(得分:0)
除了从用户集合中读取并以编程方式执行此“连接”操作之外,我认为您没有太多选择。 您可以每个包(在循环内)读取用户文档,或者事先将整个用户集合读入对象,并按用户名进行查找
答案 1 :(得分:0)
您可以使用$in
运算符。
的伪代码(ISH):
// get an array of bags matching your query
db.bags.find({status: "1"}).sort({$natural:-1}, function(err, bags) {
// get a list of usernames from the bags:
var usernames = bags.map(function(bag) { return bag.username; });
// perform query on user table: find all users for which we have a bag
db.users.find({ username : { $in : usernames } }, function(err, users) {
// create a mapping of username -> first name for easy lookup
var usernames = {};
users.forEach(function(user) {
usernames[user.username] = user.firstname;
});
// map first names to bags
bags.forEach(function(bag) {
bag.firstname = usernames[bag.username];
});
// done: return it as JSON (no need to build a JSON string ourselves)
res.send({ bags : bags });
});
});