在$ elemMatch中使用变量

时间:2016-01-09 21:58:23

标签: node.js mongoose

我有一个包含数组'rating'的用户模型,这个数组包含几个对象。现在我想使用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运算符之后将变量更改为查询。

1 个答案:

答案 0 :(得分:0)

您可以在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(...);