[英]Indexing arrays of objects in MongoDB
我有一個巨大的電子郵件轉儲,試圖在MongoDB中存儲和查詢。 有160萬封電子郵件,每封電子郵件都存儲為Node模塊的輸出,該模塊將原始電子郵件解析為漂亮的Javascript對象,如下所示:
{
"text" : "This is the text of my email",
"subject" : "Great opportunity",
"from" : [
{
"address" : "chris.wilson@example.com",
"name" : "Chris Wilson"
}
],
"to" : [
{
"address" : "person.a@example.com",
"name" : "Person A"
},
{
"address" : "person.b@example.com",
"name" : "Person B"
},
{
"address" : "person.c@example.com",
"name" : "Person C"
}
],
"date" : ISODate("2015-01-05T21:38:55.000Z")
}
我需要能夠高效地查找“發送到person.a@gmail.com的所有電子郵件”或“克里斯·威爾遜發送的每個電子郵件”之類的內容(無論該名稱附加了哪個電子郵件地址)。
Mongo非常願意為我為“ to”和“ from”查詢建立索引,但是我不確定執行此操作時查詢是否有效:
db.emails.find({ "to.name": "Person A" })
這是一個覆蓋查詢,用於在作為鍵值對象數組的字段中查找特定屬性的特定值嗎? 對於我來說,此查詢的運行速度非常慢,但又又是一個很大的語料庫。
UPDATE
這是將“ .explain”附加到上述查詢的輸出:
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 24,
"nscannedObjects" : 1646837,
"nscanned" : 1646837,
"nscannedObjectsAllPlans" : 1646837,
"nscannedAllPlans" : 1646837,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 17088,
"nChunkSkips" : 0,
"millis" : 84685,
"server" : "DCA-TM-GUEST-iMac.local:27017",
"filterSet" : false
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.