在MongoDB中,在MongoDB中你如何查詢僅包含某些字段的記錄,並沒有其他
要查詢包含某些字段的記錄,你可以這樣做:
collection.find({'field_name1': {'$exists': true}})
這將返回任何記錄具有'field_name1'字段集...
但你如何查詢mongo查找包含只有'field_name1'(並沒有其他字段)的記錄?我希望能夠做到這一點,例如,一個字段列表。
在MongoDB中,在MongoDB中你如何查詢僅包含某些字段的記錄,並沒有其他
要查詢包含某些字段的記錄,你可以這樣做:
collection.find({'field_name1': {'$exists': true}})
這將返回任何記錄具有'field_name1'字段集...
但你如何查詢mongo查找包含只有'field_name1'(並沒有其他字段)的記錄?我希望能夠做到這一點,例如,一個字段列表。
令人難過的答案,就像您經常在MongoDB和其他NoSQL數據庫中發現的那樣,可能最好是以儘可能簡單的方式來查詢數據。
這就是說,有這樣做的方法,但據我所知,它需要你執行JavaScript服務器端。這會很慢,並且不可能利用MongoDB的索引和其他邏輯特性,所以只有在絕對必要時才使用它,如果性能非常重要。
因此,最簡單的方法是創建一個函數,該函數返回對象中的字段數量,我們可以使用這個查詢語法的$where。這使您可以針對您的數據運行任意的JavaScript查詢,並且可以與普通的語法查詢結合使用。不幸的是,我的JavaScript-fu有點虛弱,所以我不知道如何(或者如果)在單行程中獲得JS對象的數量,所以爲此,我會store a function server side。
從蒙戈外殼,執行以下命令:
db.system.js.save(
{
"_id" : "countFields",
"value" : function(x) { i=0; for(p in x) { i++; } return i}
}
)
就這樣,你有一個保存的JavaScript函數,服務器端,稱爲countFields
返回對象中的元素的數量。現在,你需要與$where
查詢來執行您的查找操作:
db.collection.find({
'field_name1': {'$exists': True},
'$where' : 'countFields(this)==2'
})
這將使你只有滿足這兩個條件$exists
和$where
條款的文件。請注意,我在示例中與2進行比較,因爲countFields
函數計數爲_id
作爲字段。
可能是重複的http://stackoverflow.com/questions/13117381/how-to-exclude-from-search-results-documents-with-fields-which-are-not-present-i/13118087#13118087 – Sammaye