假設我有一個如下的對象數組。查詢在mongodb中檢索數組中的多個對象
"array" : [
{
"id" : 1
},
{
"id" : 2
},
{
"id" : 2
},
{
"id" : 4
}
]
如果我想要檢索多個對象({ID:2})從這個數組,聚集查詢是這樣的。
db.coll.aggregate([{ $match : {"_id" : ObjectId("5492690f72ae469b0e37b61c")}}, { $unwind : "$array"}, { $match : { "array.id" : 2}}, { $group : { _id : "$_id", array : { $push : { id : "$array.id"}}}} ])
上述聚集的輸出是
{
"_id" : ObjectId("5492690f72ae469b0e37b61c"),
"array" : [
{
"id" : 2
},
{
"id" : 2
}
]
}
現在的問題是: 1)由使用查找() MongoDB中的陣列可能檢索多個對象的?
2)關於性能,是聚合是正確的方法嗎? (因爲我們需要使用四個管道運營商)?
3),我們可以使用Java操作(循環數組,並只保留{ID:2}對象)來做到這一點後 發現({ 「_ ID」:物件( 「5492690f72ae469b0e37b61c」)})查詢?因爲find會一次檢索文檔並將其保存在RAM中。但是如果我們使用聚合,則需要在RAM中執行四個操作來獲取輸出。
爲什麼我問3)的問題是:假設如果成千上萬的客戶端同時訪問,那麼RAM的內存將會超載。如果它是使用Java完成的,那麼RAM上的任務更少。
4)工作集將在RAM中存放多長時間 ??
我的理解是否正確?
請糾正我,如果我錯了。
請建議我有這個權利的洞察力..
1每題的問題。這是如何工作的。否,沒有其他方法可以使用'.find()'過濾數組。聚合框架就是這個工具。請將您的其他問題作爲單獨的問題提出。問題4屬於[dba.stackexchange.com](http://dba.stackexchange。com) –
並注意點「3」,就好像你沒有聚合任何東西或者需要這個在其他一些其他的階段那麼你可能更好的過濾你的客戶端陣列。這一切都取決於規模。 –
聚合比find()慢。這就是我問問題3)的原因。那麼什麼是正確的方法。 find()+ Java或aggregation()? – manojpt