2013-11-09 17 views
1

有MongoDB的集合與具有"name"場記錄,我試圖執行在名稱字段在查詢中兩次出現查找查詢。我想通過$nin排除某些名稱,並對其他名稱執行正則表達式搜索。它似乎沒有工作,因爲它會返回所有記錄。如果我只有正則表達式搜索或$nin搜索,它按預期工作。我如何同場多次使用MongoDB中找到查詢中的NodeJS

db.users.find({name:{$nin:[current_user]}).cb(array) - 工程

db.users.find({name:new RegExp(/query/)}).cb(array) - 工程

db.users.find({name:{$nin:[current_user]}, name:new RegExp(/query/)}).cb(array) - 不工作,CURRENT_USER不是從查找結果中排除。

我有一種感覺,find命令花費相同的字段多次出現的最後一個查詢,是這樣的嗎?我該如何解決它?

感謝您的幫助, 加里

回答

5

您的查詢JSON對象包含name場兩次,它打破了查詢。請注意0​​mongo查詢運算符。有兩種方法來構造正確的查詢:

1)db.users.find({ $and: [{ name: { $nin: [current_user] } }, { name: { $regex: new RegExp(/query/) } }] })

2)db.users.find({ name: { $nin: [current_user], $regex: new RegExp(/query/) } })

此外,如果排除只有一個用戶,你可以用它代替$nin$ne操作。

+0

我的印象是逗號分隔的鍵列表下:值對find命令是做經營的相當,但我想不會,當現場被多次使用。謝謝。 –

+2

是的,逗號分隔是正確的做法。使用$並不是正確的方法。所以1)不是做它的方法,2)是,除了你的正則表達式語法是錯誤的。 –

+1

1)但爲什麼呢?我對簡單的測試數據運行了這樣的查詢,它給了我預期的結果。另外[docs](http://docs.mongodb.org/manual/reference/operator/query/and/)表示,「但是,如果查詢需要在同一領域進行AND操作,例如'{price:{ $ ne:1.99}}'AND'{price:{$ exists:true}}',然後對這兩個單獨的表達式使用'$和'運算符,或者將字段'{price:{$ ne :1.99,$ exists:true}}'「。也許我想念什麼? 2)謝謝你指出這個錯誤!我糾正了它。 – Shad