2013-03-13 59 views
3

我正在開發一個應用程序,使用貓鼬訪問MongoDB。在node.js上用mongoose過濾查詢結果

而我試圖實現的是做一個查詢,並通過ID放棄一些文件。

User.find({}) 
    .where('price').lt(upperLimit) 
    .... 
    .exec(function(err, users) { 
     // 
    }); 

重點是我想放棄一些用戶,我知道之前做查詢。有任何想法嗎?。我不想後處理用戶集合和過濾器。

謝謝!

回答

2

您可以使用$ne操作:

User.find({"_id":{"$ne":<IdToExclude>}}). … 
+0

好了,但如果它,對象的數組? – 2013-03-13 13:18:45

+0

對於數組,您可以使用[$ all](http://docs.mongodb.org/manual/reference/operator/all/)運算符。 'User.find({ 「IDS」:{ 「$ NE」:{ 「$ ALL」:[,...]}}})。 ...' – nutlike 2013-03-13 13:21:20

+0

我認爲JohnnyHK的方法更好,但是如果這個方法也可以讓我們知道嗎? – nutlike 2013-03-13 13:28:22

3

可以使用$nin運營商排除_id值的數組:

User.find({}) 
    .where('price').lt(upperLimit) 
    .nin('_id', idsToExclude) 
    .... 
    .exec(function(err, users) { 
    // 
    }); 
+1

如果可能的話,我會建議不要使用$ nin運算符,而是使用$ ne運算符,因爲$ nin不能使用索引(索引只包含非排他性),因此強制跨所有文檔進行表掃描。 – christkv 2013-03-15 07:59:16

+1

@christkv實際上,'$ nin'和'$ ne'都不能有效地使用索引(參見[here](http://docs.mongodb.org/manual/faq/indexes/#using-ne-and-nin-in -a-query-is-slow-why)),但是在他的評論中註釋爲@nutlike,'$ ne'在這種情況下不起作用。只要首先包含另一個查詢詞(在本例中爲'price'),'$ nin'只需要以相匹配的價格掃描文檔,而不是整個集合。 – JohnnyHK 2013-03-15 12:01:09