2012-08-07 34 views
1

我想要比較,排序,過濾等MongoDB ObjectIDs數組以及基於數組對文件進行排序。我的主要問題是:我應該使用ObjectID.equals()還是可以將它們全部轉換爲字符串,使用indexOf等本機比較,然後將它們轉換回來?有關係嗎?比較和排序Node中的MongoDB ObjectIDs - 轉換爲字符串?

我的具體用例:用戶可以將帖子保存到列表中。我將它保存爲ObjectIDs user.saves的數組。我想按順序檢索前25個帖子,所以我查詢{_id: {$in: user.saves.slice(0, 25)}}。你將如何整理檢索到的文件?

+0

如果你是'$ push'ing對象到'保存()'陣,是不是已經暗示排序?你想要排序和檢索哪些文檔..你是否在另一個find()上objectIds'$ in'數組? – Stennie 2012-08-09 07:32:57

+0

是的。除非你有更好的主意,否則唯一的方法就是逐一檢索它們。 – 2012-08-09 08:20:44

+0

因爲我想你想按照'saved []'數組中的順序進行自定義排序,而不是你正在檢索的文檔的任何屬性,所以確實沒有太多更好的想法。可能最好是執行'$ in'查詢,然後對檢索到的結果(在您的應用程序代碼中)進行自定義排序,而不是通過'save []'順序進行迭代並執行25個查詢。 – Stennie 2012-08-15 12:55:10

回答

2

解決方案:

db.collection.find({ 
    $or: [{ 
    _id: _id1 
    }, { 
    _id: _id2 
    }] 
}, callback) 
-4

Mongodb中ObjectId的用途是唯一標識一個文檔。 你應該永遠不需要使用它進行排序操作,當然不需要轉換爲字符串。

如果您只想獲取按創建時間排序的文檔列表。 您應該添加created_at(timestamp)字段,您可以使用它在需要時對文檔進行排序。

如果您不想添加額外的字段。 ObjectId包含時間戳記組件,所以你可以提取這個並使用它進行排序。但常用的方法是添加額外的字段。

+1

1)你不需要一個created_at時間戳字段,因爲ObjectID已經有了它。 2)永遠不要說永遠。 3)在這種情況下不需要添加「字段」。 4)這不能遠程解決我的問題。 – 2012-08-07 09:56:15

+0

1)好像你看不懂,我特別提到你可以從objectId中提取時間戳,但這不是排序文件的常用方法。 2)ObjectId不用於排序。 3)你應該添加額外的領域,所以你可以使用它進行排序。 4)如果你沒有提出很好的問題,但無法閱讀,你永遠不會解決你的問題。 – jamjam 2012-08-07 10:09:45

+0

1)http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order 2)爲什麼你會考慮使用時間戳訂閱? – 2012-08-07 10:27:18

相關問題