我正在尝试使用Mongoose查询MongoDB,以根据嵌套属性的值查找文档。
var Obj = new mongoose.Schema({
mainProperty: {
nestedProp1: String
nestedProp2:String
}
})
由于接收数据的方式,我需要在没有点表示法的情况下执行查询(如下所示)。
Obj.find({'mainProperty.nestedProp': 'value'})
上面的代码会得到正确的结果,但我需要以下面的格式传递查询条件。
Obj.find({ mainProperty: { nestedProp1: 'value' } })
我从客户端传递整个查询对象作为参数,而不是在服务器上开发查询。当它到达服务器时,上面的代码如下所示。
Obj.find(queryCondition)
//queryCondition holds a value of { mainProperty: { nestedProp1: 'value' } }
由于mainProperty中嵌套了两个属性,因此无法执行上述搜索。它将搜索mainProperty与冒号后传递的内容完全相同的文档(意味着值等于nestedProp1且没有nestedProp2的文档)。
是否有另一种方法来调用它(没有点符号或编辑对象本身),它将查询nestedProp1的值而不是mainProperty的值?
答案 0 :(得分:0)
有,你可以做类似
的事情const filter = {};
// check if you have specified nestedProp1
if ( req.body.nestedProp1 ) {
filter['mainProperty.nestedProp1'] = req.body.nestedProp1;
}
if ( req.body.nestedProp2 ) {
filter['mainProperty.nestedProp2'] = req.body.nestedProp2;
}
// and then
Obj.find( filter );
因此,如果您指定了过滤器,您将收到过滤记录,否则将收到默认记录。
我尚未测试代码,因此如果这不起作用,您可以尝试执行filter['mainProperty']['nestedProp1'] = req.body.nestedProp1;
答案 1 :(得分:0)
您可以将大多数Mongo DB语法与Mongoose #overlay {
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
}
一起使用。试试这个:
find()