2016-03-10 70 views
0

由於Mongo是無模式的,因此已知文檔可以具有不同的鍵。如果字段名稱包含('something'),則mongodb搜索

我處於一種情況,我需要搜索字段名稱[即鍵名]而不是它的價值。

我在很多地方閱讀過它,發現可以使用$where ,我意識到這並不高效;但沒關係!因爲這將是生產前的一次調查。

所以我試圖建立查詢,但我未能產生預期的結果,因爲我知道密鑰在數據庫中可用。

我的JS代碼:

function kName(){ 
    for (var k in obj){ 
     if (k.startsWith('gold')){ 
      return obj 
     } 
    } 
} 

所以我用它爲以下幾點:

db.nodes.find({$where: kName}) 

,但我沒能返回有效的結果,因爲我知道有一個「黃金」字段名

然後我試過了:

db.nodes.find({$where: kName()}) 

再次失敗。

然後我修改的功能:

function kName(obj){ 
    for (var k in obj){ 
     if(k.startsWith('gold')){ 
      return obj 
     } 
    } 
} 

,並再次我試圖 db.nodes.find({$其中:kName()}) 和失敗。

然後試圖

db.nodes.find({$where: kName(obj)}) 

所以我的問題是:

我如何用我自己的JS功能,利用$其中MongoDB的條款找到一個字段名稱存在。

回答

0

嘗試用$存在:

db.nodes.find({kName:{$exists: true}}) 

它返回一個包含指定關鍵字或屬性的所有文件。請參閱MongoDb文檔$exists

+0

https://docs.mongodb.org/manual/reference/operator/query/exists/#exists'$ exists'不支持字段名稱。它只會搜索文檔是否存在。我嘗試了你的建議,但沒有得到預期的結果。感謝您的回覆 – stackunderflow

+0

我不確定您是否覺得它不檢查字段是否存在。看看有什麼文件說**當布爾值爲真時,$ exists與包含該字段的文檔匹配** – Saleem

+0

是@Saleem。當您在文檔中查找字段時,可以使用'$ exists'。我的情況是,'kName'是JS函數(不是鍵名),它應該檢查每個字段名稱,如果它以(「字符串在這裏」)開頭。所以我認爲'$ exists'不能用於JS函數,但與文檔的字段(鍵)。我也試過沒有成功。請糾正我,如果我失去了一些東西..再次感謝您寶貴的時間 – stackunderflow

相關問題