2014-02-07 68 views
0

我有一個代表你的廣告的商店如下文件:MongoDB的 - 嵌入文檔與_id到孩子

{name: "name of store", 
address: "address of store", 
advertisements: [{title: "title of advertising", desc: "desc of advertising"}] 
} 

要提高閱讀速度和插入或找到一個廣告,從這個店很容易,但,要刪除特定的廣告,我該如何做?

有一種方法可以在廣告數組中添加一個_id字段到元素中?這樣,我可以通過_id找到一個特定的項目。

我不喜歡使用$ elemMatch通過您的姓名或其他非de _id字段查找項目的方法。

謝謝!

回答

1

對於嵌入式文檔,沒有_id字段,它們是集合中主文檔的屬性。有一個完整的交代在這裏: http://docs.mongodb.org/manual/core/document/

任何嵌入文件或數組元素,甚至文檔中的數組存儲完全一樣就是,在你將如何使用JSON結構或工作的自然形態非常接近,最dynaminc語言原生表示。

對於數組中的文檔,您可以使用$elemMatch查詢運算符來查找想要刪除的文檔。

{ name: "<matching name>", advertisements: { $elemMatch: { title: 'title of advertising' } } } 

或者還有點符號的方法:

{ name: "<matching name>", advertisements.title = 'title of advertising' } 

甚至索引符號:

{ name: "<matching name>", advertisements[0] } 

無論如何也有Array operators集合用於更新,讓您可以操縱元素。

也許你真正的問題不在於$elemMatch,而是包含的文件結構中沒有的唯一密鑰要訪問它們。既然如此,也許你應該考慮改變你的數據中的子文件的結構,以便有一個合理的標識符用於找到你想要的文件。這通常是最佳實踐方法。

+0

是的,我同意你的意見。但是,我的問題是我需要找到一些商店,而不是全部。所以,如果我有兩個獨立的集合(商店和廣告),我需要:1)根據我的標準獲取所有商店。 2)對於每個商店,從該商店獲取所有廣告。因此,如果我有100家商店,每家商店有10個廣告,那麼在廣告收集上將會有100個查詢! Plus循環迭代!這就是爲什麼我更喜歡只有一個集合。 – vitorvigano

+0

不遵循你的邏輯。您應該能夠在一次查找操作中查詢「商店匹配」和「廣告匹配」條件。也許你應該擴大你的問題,以顯示與您試圖匹配,而不是僅僅顯示一個標準的文件,一個小樣本。您剛纔的意見並未在您提問的問題中指出。 –