Mongodb 根据数组中对象的属性进行匹配

Mongodb 根据数组中对象的属性进行匹配,mongodb,mongodb-query,Mongodb,Mongodb Query,以下是我的收藏中一个对象的结构: { name: foo my_list: [ {a:32, b:23}, {a:12, b:31} ] } 我希望得到我的_列表中最后一项的b与某个值匹配的对象。我已经尝试使用$project和$arrayElemAt,但我不想在返回对象时更改对象的结构。如果确保最后一个数组项始终位于第一位,那会更明智,因为您可以查询我的列表。0.b:3没有问题。这里有一个$position修饰符,它是一个时间序列,我必须反转数组来绘制它。我宁

以下是我的收藏中一个对象的结构:

{
  name: foo
  my_list: [
    {a:32, b:23},
    {a:12, b:31}
  ]
}  

我希望得到我的_列表中最后一项的b与某个值匹配的对象。我已经尝试使用$project和$arrayElemAt,但我不想在返回对象时更改对象的结构。

如果确保最后一个数组项始终位于第一位,那会更明智,因为您可以查询我的列表。0.b:3没有问题。这里有一个$position修饰符,它是一个时间序列,我必须反转数组来绘制它。我宁愿维持这个秩序。我们做个决定吧。是否更重要的是保持数据的有序性,使其能够持续一次查询?或者你真的需要对最新的数据进行这种查询吗?唯一的另一个选项涉及到完整的集合扫描,因此您不能同时使用这两种方式。如果需要此最新查询,则将最新查询放在数组的前面。在这个选择上没有太多的回旋余地。好的,谢谢,我想我会复制最新的b值,并将其存储在阵列之外!但它不是一个索引,它只是另一个值。
db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $project: {
                my_list: {
                    $slice: ["$my_list", -1, 1]
                },
                name: 1
            }
        },

        // Stage 2
        {
            $match: {
                'my_list.b': 31.0
            }
        },

    ]



);