2016-12-14 26 views
2

我苦苦尋找執行一種化合物的MongoDB find()以下標準的一個好方法返回一個文件:根據搜索條件MongoDB的:如果另一個不存在

  • 查詢將匹配一個文件
  • 如果找到匹配項,該文件將被退回
  • 如果找不到匹配項,則將返回其他文件。這第二個文檔將匹配另一組標準
  • 該查詢理想情況下會返回一個記錄,無論如何。

在我的特殊情況下,我收集了一個users,其中包含用戶列表及其關聯的權限。它還包含一個包含默認權限的guest僞用戶的特殊條目。這個guest文檔是在沒有發生確切的用戶匹配時需要返回的文檔。

我已經嘗試過使用{$or: [ { id: "bob" }, {id: "guest" } ]}以及{ id: { $in: [ "bob", "guest" ] } },但是這兩個搜索按順序收集,並且將返回「bob」或「guest」,具體取決於先插入哪一個。

有沒有辦法明確說找到bob或作爲後備,返回guest文件?

請記住,這將從Node.js執行,因此我正在尋找一個乾淨的&簡單的方法將其卸載到MongoDB。

我意識到這可以做爲兩個查詢,但我想盡可能避免這種情況。

謝謝!

回答

0

如果您插入guest作爲第一個對象,那麼通過組合limitsort by _id您可以解決這個問題!

0

我認爲,而不是使用find({}),你可以使用聚合,並在$ in和$ cond操作符可以解決您的問題。 您可以參考這個鏈路> https://docs.mongodb.com/v3.2/reference/operator/aggregation/cond/

+0

嗯,我不知道'$ cond'存在。這可能只是做到了,儘管最終的結果會很長。我不知道是否有一種替代方式沒有聚合... – mstubbies

相關問題