有没有办法使用最近获得的值来查找其他值?在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]
        }
    } }
])

非常感谢你!