有没有一种方法可以使用最近获得的值来寻找其他值?在MongoDB中



我想创建一个查询,并使用获得的值在同一查询中查找其他值。我的收藏是这样的:

{
"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不让我连接$符号。我避免做两个查询,一个用于获取房屋编号,另一个用于获得房屋信息。

有人能帮我做这个吗?对不起,如果我不能很好地解释自己,英语不是我的母语。

使用$objectToArray$filter运算符非常可能。$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"
}

添加使用$arrayElemAt运算符作为的进一步投影管道阶段

db.collection.aggregate([
{ '$project': {
'house_array': {
'$filter': {
'input': { '$objectToArray': '$houses' },
'cond': {
'$eq': ['$owners.Anne.house', '$$this.k']
}
}
}
} },
{ '$project': {
'house_info': {
'$arrayElemAt':  ['$house_array', 0]
}
} }
])

相关内容

最新更新