我有一个包含数组'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运算符之后将变量更改为查询。
答案 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(...);