【问题标题】:Using a variable in $elemMatch在 $elemMatch 中使用变量
【发布时间】:2016-04-14 10:55:27
【问题描述】:

我有一个包含数组“ratings”的用户模型,这个数组包含几个对象。现在我想使用 mongoose 的 $elemMatch 函数搜索某个对象是否在这个数组中。如果我以硬编码的方式进行操作,一切正常:

User.find(
        {
            ratings: {
                $elemMatch: {
                    1: {$gt: 0}
                }
            }
        },

但是,如果我想使用变量进行搜索,我什么也得不到。我也无法使用 var query = {};方法。

var variable = 00001;
console.log(variable);
var query = {};
query[variable] = 7;
User.find(
{
    ratings: {
        $elemMatch: {
            variable: {$gt: 0}
        }
    }
},

在 $elemMatch 运算符之后将变量更改为查询也不起作用。

【问题讨论】:

  • 在您的第二个示例中,您希望完整的查询是什么样的?目前尚不清楚,因为您同时拥有 000017

标签: node.js mongoose


【解决方案1】:

您可以在 find 之外创建查询对象,就像您尝试做的那样。您可以像我在选项 1 中所做的那样在 find() 之外创建整个过滤器,或者您可以创建一个片段并将其添加到过滤器的其余部分(选项 2)。

// Option 1
var query = {
    ratings: {
        $elemMatch: {}
    }
};
query.ratings.$elemMatch['1'] = {$gt: 0};

User.find(query)
    .exec(...);

// Option 2
var query = {};
query['1'] = {$gt: 0};

User.find(
{
    ratings: {
        $elemMatch: query
    }
}
)
.exec(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多