我正在開發一個應用程序,使用貓鼬訪問MongoDB。在node.js上用mongoose過濾查詢結果
而我試圖實現的是做一個查詢,並通過ID放棄一些文件。
User.find({})
.where('price').lt(upperLimit)
....
.exec(function(err, users) {
//
});
重點是我想放棄一些用戶,我知道之前做查詢。有任何想法嗎?。我不想後處理用戶集合和過濾器。
謝謝!
我正在開發一個應用程序,使用貓鼬訪問MongoDB。在node.js上用mongoose過濾查詢結果
而我試圖實現的是做一個查詢,並通過ID放棄一些文件。
User.find({})
.where('price').lt(upperLimit)
....
.exec(function(err, users) {
//
});
重點是我想放棄一些用戶,我知道之前做查詢。有任何想法嗎?。我不想後處理用戶集合和過濾器。
謝謝!
您可以使用$ne操作:
User.find({"_id":{"$ne":<IdToExclude>}}). …
可以使用$nin
運營商排除_id
值的數組:
User.find({})
.where('price').lt(upperLimit)
.nin('_id', idsToExclude)
....
.exec(function(err, users) {
//
});
如果可能的話,我會建議不要使用$ nin運算符,而是使用$ ne運算符,因爲$ nin不能使用索引(索引只包含非排他性),因此強制跨所有文檔進行表掃描。 – christkv 2013-03-15 07:59:16
@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
好了,但如果它,對象的數組? – 2013-03-13 13:18:45
對於數組,您可以使用[$ all](http://docs.mongodb.org/manual/reference/operator/all/)運算符。 'User.find({ 「IDS」:{ 「$ NE」:{ 「$ ALL」:[,,...]}}})。 ...' –
nutlike
2013-03-13 13:21:20
我認爲JohnnyHK的方法更好,但是如果這個方法也可以讓我們知道嗎? – nutlike 2013-03-13 13:28:22