我试图从mongodb集合
获得注册用户的列表。在我的用户列表中,我已经存储了属于另一个集合的一些其他细节。像国家,州,城市
我使用mongoDB版本3.2
和聚合方法来获取我的用户列表。
在我的用户列表中,我想显示国家名称、州名称和城市名称,因此我使用$lookup
加入这些集合以获取名称。
这只是一个以国家、州和城市为例的例子,它可以是我只想在一个查询中实现连接集合的任何类型的类别数据。
以下是我迄今为止所尝试的:
>
但是现在我也想从每个文档中只得到几个列,所以我使用了$project
"$project": {
"full_name": 1,
"email": 1,
"mobile": 1,
"country": 1,
"state": 1,
"city": 1
}
第二个WHERE CONDITION-添加$project
到我的where条件后,它只给我那几列没有country_name,state_name和city_name
请告诉我为什么我的查询在使用$project
后没有给出国家名、州名和城市名。
[
{
"$match":{
"status":{
"$ne":2
}
}
},
{
"$lookup":{
"from":"countries",
"localField":"country",
"foreignField":"id",
"as":"country_det"
}
},
{
"$lookup":{
"from":"states",
"localField":"state",
"foreignField":"id",
"as":"state_det"
}
},
{
"$lookup":{
"from":"cities",
"localField":"city",
"foreignField":"id",
"as":"city_det"
}
},
{
"$limit":10
},
{
"$skip":0
},
{
"$project":{
"full_name":1,
"email":1,
"mobile":1,
"country":1,
"state":1,
"city":1
}
}
]
$project不能作为WHERE条件工作,它不能过滤记录。它作为映射器工作。(它按照指定的方式转换每个记录,这就是为什么它被命名为“项目”)。
就你而言。此管道阶段:
"$project":{
"full_name":1,
"email":1,
"mobile":1,
"country":1,
"state":1,
"city":1
}