2014-10-27 104 views
1

我有ObjectID秒的陣列排列,代表一個集合中的文檔_id值:查詢通過的ObjectID

ObjectID[] documentsAffected 

我如何可以準備一個查詢,返回所有在此數組中引用的文件?

我已經看過以下,但只與個別值,而不是數組的工作原理:

Query.EQ("_id", documentsAffected) 

我不想寫一個for循環,並在某一時刻要麼返回一個文檔,因爲然後,我需要以相同的方式更新這些文檔,這似乎是低效的,因爲我可以在全部檢索完所有語句後在一個語句中更新它們。

有沒有辦法有效地做到這一點?如果沒有,是否有另一種方法可以根據引用它們的項目列表返回所有文檔?

回答

1

可以使用In代替EQ

Query.In("_id", documentsAffected); 

或者更好,使用類型選擇:

Query<Document>.In(doc => doc.Id, documentsAffected); 

這將使用$in運營商創建一個查詢

$ in操作符選擇字段值等於的文檔指定數組中的任何值。如果該字段持有數組,然後在運營商$選擇其字段保存包含指定數組

在相匹配的值從$in

+1

感謝至少一個元素的數組的文件!我最終使用了你指定的第二個選項。 – CynicalProgrammer 2014-10-30 18:15:07