有没有办法使用最近获得的值来查找其他值?在MongoDB
我想进行一个查询,并使用得到的值在同一查询中查找其他值。 我的收藏是这样的:有没有办法使用最近获得的值来查找其他值?在MongoDB,mongodb,nosql,aggregation-framework,aggregate,Mongodb,Nosql,Aggregation Framework,Aggregate,我想进行一个查询,并使用得到的值在同一查询中查找其他值。 我的收藏是这样的: { "houses": { 123: { "color": "white", "location": "California" }, 124: { "color": "blue", "location
{
"houses": {
123: {
"color": "white",
"location": "California"
},
124: {
"color": "blue",
"location": "Las Vegas"
}
},
"owners": {
"Anne": {
"house": 124,
},
"Jake": {
"house": 123
}
}
}
db.collection.aggregate([
{'$project' {'houses': 1, 'house_number': '$owners.Anne.house'}},
{'$project': {'house_info': 'houses.$house_number':1}}
])
在进行查询之前,我只知道房主的姓名,我想得到房子的信息(颜色、位置)
我想问的是,是否有一种方法可以在同一个查询中使用房屋号来获取房屋信息。大概是这样的:
{
"houses": {
123: {
"color": "white",
"location": "California"
},
124: {
"color": "blue",
"location": "Las Vegas"
}
},
"owners": {
"Anne": {
"house": 124,
},
"Jake": {
"house": 123
}
}
}
db.collection.aggregate([
{'$project' {'houses': 1, 'house_number': '$owners.Anne.house'}},
{'$project': {'house_info': 'houses.$house_number':1}}
])
我试着把门牌号做成一个字符串,并用$houses表示出来,但mongo不让我用$houses表示出来。
我避免了两个查询,一个是获取房屋号,另一个是获取房屋信息
有人能帮我吗?对不起,如果我不能很好地解释我自己,英语不是我的母语。使用and运算符很有可能。$objectToArray用于将houses对象/文档转换为键/值数组 财产。使用此数组,您可以使用“$owners.Anne.house”值进行筛选 以这个聚合管道为例:
db.collection.aggregate([
{ '$project': {
'house_info': {
'$filter': {
'input': { '$objectToArray': '$houses' },
'cond': {
'$eq': ['$owners.Anne.house', '$$this.k']
}
}
}
} }
])
结果是:
{
'house_info': [
{
k: '124',
v: {
"color": "blue",
"location": "Las Vegas"
}
}
]
}
仅获取数据文档
{
"color": "blue",
"location": "Las Vegas"
}
添加另一个投影管道阶段,该阶段使用操作符作为
db.collection.aggregate([
{ '$project': {
'house_array': {
'$filter': {
'input': { '$objectToArray': '$houses' },
'cond': {
'$eq': ['$owners.Anne.house', '$$this.k']
}
}
}
} },
{ '$project': {
'house_info': {
'$arrayElemAt': ['$house_array', 0]
}
} }
])
非常感谢你!