这是我的第一个MongoDB项目,我还处于系统的设计阶段,所以我想知道我是否正在设计它。
我想知道是否可以在$ in选择器中使用addToSet方法,如果是,那有多贵?
例如,我有一些这样的数据:
{
{
Id:1,
Groups: ["Group1", "Group2"],
Events:["event1"]
},
{
Id:2,
Groups: ["Group2" ],
Events:["event2"]
},
,
{
Id:3,
Groups: ["Group1","Group3" ],
Events:["event1"]
},
}
是否可以像下面那样调用它,这有多贵?
db.test.update(
{ Groups: { $in: ["Group1"] } },
{ $addToSet: {Events: [ "newEvent1", "newEvent2" ] } }
)
* P.S.S:由于查询是在list属性上,我应该添加一个索引吗?它甚至是一种正确的方法吗?
也许我使用了错误的选择器,但我只想更新其组中包含group1的行。所以结果预计是这样的:
{
{
Id:1,
Groups: ["Group1", "Group2"],
Events:["event1", "newEvent1", "newEvent2"]
},
{
Id:2,
Groups: ["Group2" ],
Events:["event2"]
},
,
{
Id:3,
Groups: ["Group1","Group3" ],
Events:["event1","newEvent1", "newEvent2"]
},
}
答案 0 :(得分:1)
“昂贵”是一个相对术语,也取决于其他因素,例如:
$in
和$addToSet
中有多少字词不幸的是,这些问题没有单一,简单的答案,因为其中许多问题都与工作负载有关。此外,您发布的查询只是您需要的其他查询中的一个。
话虽如此,MongoDB中的慢查询通常是由以下原因引起的:
了解您的计划查询是否过于昂贵的唯一方法是查看他们的explain()
输出,看看是否有任何明显的改进,例如{{1}的存在}阶段,与检查文档相比较少的返回文档(这意味着查询不够有针对性)。
您可能会发现这些链接通常包含有关优化的足够信息:
一旦优化了查询,就可以将模拟工作负载放在应用程序上了。数据库,并使用以下工具监控其性能:
并确认您为预期会看到的工作负载配置了足够的硬件。