2014-04-02 84 views
1

排除查詢的領域我有一些模式,使查詢如下:無法包含並通過貓鼬

mongoose.model('mymodel').find({}, 'one -two -__v', function(err,docs){}); 

我想要的文件應該只返回了場「一」。總是忽略字段'two'並全部休息。 然後我得到以下錯誤:

You cannot currently mix including and excluding fields. Contact us if this is an issue. 

我產生所述場字符串動態地包含或排除所需的字段。

如何擺脫錯誤。

回答

4

這實際上與貓鼬無關。 mongo本身存在「限制」。

collection.find documentation

一種投影不能同時包含包含和排除的規格,除了_id場的排斥。在明確包含字段的投影中,_id字段是唯一可以明確排除的字段。


你要麼包括排除,你不能兩者都做,(用_id除外)

只選擇_idone

'one' 

全選字段除了two

'-two' 

例外:只選擇one沒有_id

'one -_id' 
+0

正要提到這是一個MongoDB的問題,但被添加。仍值得一提的是,「版本」字段是貓鼬特有的,因此不能以這種方式排除。但是,您可以具體說明使用聚合的字段。 –

+0

@NeilLunn,我不太清楚你的意思。如果您願意,請隨時編輯我的答案。 –

+0

我不喜歡正確的答案,只是留下一張紙條。關鍵是要查看聚合管道的[$ project](http://docs.mongodb.org/manual/reference/operator/aggregation/project/)操作符。它比'.find()'中的投影更具體。與$ match操作符一起使用,最終得到更好的'.find()'版本。特別是在[新版本](http://docs.mongodb.org/master/release-notes/2.6/#aggregation-enhancements)中.agagregate()返回一個遊標。 –