簡體   English   中英

查找和更新部分嵌套集合

[英]Find & Update partial nested collection

假設我有一個Mongo集合,例如:

通用模式:有類別,每個類別都有一個主題數組,每個主題都有一個評級。

[
{CategoryName: "Cat1", ..., Topics: [{TopicName: "T1", rating: 9999, ...}, 
{TopicName: "T2", rating: 42, ....}]},
{CategoryName: "Cat2", ... , Topics: [...]},
...
]

在我的客戶端流星代碼中,我有兩個要平滑執行的操作,而無需執行任何其他過濾操作:查找和更新。

我想象如下的查找查詢:

.find({CategoryName: "Cat1", Topics: [{TopicName: "T1"}]}).fetch()

但是,這將返回整個文檔-我想要的結果只是部分的:

[{CategoryName: "Cat1", ..., Topics: [{TopicName: "T1", rating: 9999, ...}]}]

同樣,通過更新,我希望查詢如下:

.update({CategoryName: "Cat1", Topics: [{TopicName: "T1"}]}, {$set: {Topics: [{rating: infinityyy}]}})

僅更新主題T1的等級,而不是類別Cat1的所有主題的等級。

同樣,我想避免任何過濾,因為其余的數據甚至不應該首先發送到客戶端。

謝謝!

您需要將查詢修改為以下內容:

Categories.find( { CategoryName: 'Cat1', 'Topics.TopicName': 'T1' }, { fields: { 'Topics.$': 1 }}, // make sure you put any other fields you want in here too ).fetch()

該查詢的作用是搜索與名稱Cat1匹配的Category,並且在Topic數組中具有TopicName等於T1的對象。

fields投影中,我們使用$符號告訴MongoDB返回在查詢中找到的對象,而不是Topics數組中的所有對象。

要更新此嵌套對象,您需要使用相同的$符號:

Categories.update( { CategoryName: "Cat1", 'Topics.TopicName': 'T1' }, {$set: {'Topics.$.rating': 100 }, );

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM