2015-11-05 86 views
1

db.collection.findOne({$or: [{email: '[email protected]'},{'linkedIn.id': 'profile.id'}]});這樣的請求可能會返回一個包含兩條記錄的數組。

是否可以指定僅返回第一次出現,以便始終將模型作爲響應而不是數組?

例如如果存在具有指定電子郵件的記錄,則返回該記錄並且不返回其他記錄,如果有,匹配profile.id

另一個問題是,如果參數'email''linkedIn.id'的順序很重要。

所有這些榛子都是關於LinkedIn戰略,它永遠不會返回一封電子郵件(至少對我來說),但我必須迎合可能會返回電子郵件的情況。所以我構建我的查詢取決於電子郵件的存在,如果它存在,查詢是與$or運算符。但我想避免檢查響應是一個對象還是一個數組,然後對數組值執行附加操作來確定要使用哪個值。

回答

1

根據蒙戈DB

findOne()

的文檔總是不管返回它找到的匹配的一個文件。 而關於檢索順序,它總是會返回除加蓋集合外的第一個匹配,它將文檔插入順序保存到集合中。

有關findOne更詳細的說明請參閱文檔如以下URL

https://docs.mongodb.org/manual/reference/method/db.collection.findOne/

+0

你是對的。我錯誤地用find代替findOne。 – user2814599

0

根據MongoDB的文檔爲db.collection.findOne()

返回一個文檔滿足指定查詢條件。如果多個文檔滿足查詢,則此方法將根據反映磁盤上文檔順序的自然順序返回第一個文檔。在封頂集合中,自然順序與廣告訂單相同。如果沒有文檔滿足查詢,則該方法返回null。

您無法從db.collection.findOne()接收多條記錄。你確定你沒有使用db.collection.find()

+0

擴展在此提到:使用'.find即使當()',多個結果表明重複的用戶,與屬性同一個用戶在兩個不同的文檔中。除了我在這裏丟失一些東西... –