[英]Query nested property in Mongoose (without dot notation)
我正在嘗試使用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的值?
有,你可以做類似的事情
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;
您可以將大多數Mongo DB語法與Mongoose find()
。 嘗試這個:
Obj.find({ mainProperty: { nestedProp1: { $in: ['value'] } } })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.