簡體   English   中英

查詢貓鼬的嵌套屬性(不帶點表示法)

[英]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'] } } })

Mongo文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM