MongoDB查询多个值
MongoDB query multiple values
我有一个与此类似的用户模型:
{
email: String,
name: String,
role: String,
location: {
country: String,
city: String
},
contacts: {
email: String,
phone: String
}
}
我的想法是在首页显示以下信息:
- 每个用户都有详细信息。
- 每个国家/地区的用户数量。
- 该国家/地区的每个城市以及该城市的用户数量。
所以,在 header 中,我希望有一个国家/地区列表:
- 英国 (219)
- 德国 (128)
- 法国 (87)
- 意大利 (84)
- 等...
每个国家的城市列表:
- 伦敦 (119)
- 利物浦 (76)
- 曼彻斯特 (3)
- 等...
并且在 body 用户列表中...
目前我的查询适用于除城市以外的所有内容。
查询是:
User.aggregate([
{
$group: {
_id: { country: '$location.country' },
users: { $push: '$$ROOT' },
cities: { $addToSet: '$location.city' },
count: { $sum: 1 }
}
}
], function(err, results) {
console.log(results);
});
};
在 $addToSet
中包含 $sum
会很好,但不幸的是它不起作用。
如何改进此代码?
这是一个 mongo 查询,可以满足您的要求:
User.aggregate([
{ $group: { _id: { city: "$location.city", country: "$location.country" }, users: { $push: "$$ROOT" }, count: { $sum: 1 } } },
{ $group: { _id: "$_id.country", count: { $sum: "$count" }, cities: { $push: { city: "$_id.city", count: "$count", users: "$users" } } } }
], function(err, results) {
console.log(results);
});
我有一个与此类似的用户模型:
{
email: String,
name: String,
role: String,
location: {
country: String,
city: String
},
contacts: {
email: String,
phone: String
}
}
我的想法是在首页显示以下信息:
- 每个用户都有详细信息。
- 每个国家/地区的用户数量。
- 该国家/地区的每个城市以及该城市的用户数量。
所以,在 header 中,我希望有一个国家/地区列表:
- 英国 (219)
- 德国 (128)
- 法国 (87)
- 意大利 (84)
- 等...
每个国家的城市列表:
- 伦敦 (119)
- 利物浦 (76)
- 曼彻斯特 (3)
- 等...
并且在 body 用户列表中...
目前我的查询适用于除城市以外的所有内容。
查询是:
User.aggregate([
{
$group: {
_id: { country: '$location.country' },
users: { $push: '$$ROOT' },
cities: { $addToSet: '$location.city' },
count: { $sum: 1 }
}
}
], function(err, results) {
console.log(results);
});
};
在 $addToSet
中包含 $sum
会很好,但不幸的是它不起作用。
如何改进此代码?
这是一个 mongo 查询,可以满足您的要求:
User.aggregate([
{ $group: { _id: { city: "$location.city", country: "$location.country" }, users: { $push: "$$ROOT" }, count: { $sum: 1 } } },
{ $group: { _id: "$_id.country", count: { $sum: "$count" }, cities: { $push: { city: "$_id.city", count: "$count", users: "$users" } } } }
], function(err, results) {
console.log(results);
});