【问题标题】:MongoDB Aggregation - Query array of objectsMongoDB 聚合 - 查询对象数组
【发布时间】:2020-07-27 20:26:28
【问题描述】:

我有一个包含这些数据的集合:

[
    {
        _id: "123",
        number: 10,
        users: [
            {
                amount: 20
            }
        ]
    },
    {
        _id: "456",
        number: 20,
        users: [
            {
                amount: 10
            }
        ]
    }
]

我需要找到users[0].amount 大于或等于number 的文档。我有以下 Mongoose 查询:

Model.aggregate([
    {
        $match: {
            $expr: {
                $and: [
                    { $gte: ["$users.0.amount", "$number"] },
                    ...
                ]
            }
        }
    }
]);

但是,这似乎没有正确过滤文档。我假设$users.0.amount 不是正确的语法。我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js mongodb mongoose aggregation-framework


    【解决方案1】:

    $expr 需要 Aggregation Framework 的语法,因此您必须改用 $arrayElemAt

    {  $gte: [ { $arrayElemAt: [  "$users.amount",  0] }, "$number" ] }
    

    users.amount 是一个数字数组

    MongoDB Playground

    【讨论】:

    • 谢谢,这有效,我会在定时器到时接受答案
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多