我有一个看起来像这样的对象:
{articleId:"1"
promotions:[{promoterId:"2"
viewerIps:['3', '4', '5']},
{promoterId:"6"
viewerIps:['7', '8', '9']}]}
基本上,我想跟踪有多少人(以及他们的IP)根据他们共享的用户特定链接查看某篇文章。
如果有人第一次查看该推广人的特定文章,我可以像这样推送到促销阵列:
Views.update({articleId:articleId}, {$push: {promotions:{promoterId:promoterId,
viewerIps:[viewerIp]}}});
但是假设我想推送一个特定的viewerIps数组 - 特定于articleId和promoterId。我怎么能这样做?
由于
答案 0 :(得分:1)
您可以使用.
表示法
Views.update({articleId:articleId},
{
$push: {"promotions.0.viewerIps" :viewerIp}
},
$set: {"promotions.0.promoterId":promoterId}
});
0
处的数字来自您要更改的数组中的索引位置。您可以使用positional operator,$
来查询要更改的阵列。我使用上面的数字代替$
的原因是meteor尚未完全支持$
。
如果您愿意,您只能在服务器上使用它。 There is an open github ticket about this
答案 1 :(得分:0)
我喜欢的流星的一个方面是你可以使用javascript / coffeescript 到处。我谦卑地建议你将这个策略扩展到你使用mongo更新。我发现自己只是直接使用我的json /对象操作能力而且$设置整个事情,而不是学习另一种语法。有人会说,限制你检索的字段是不成熟的优化,直到证明它会产生影响,所以你可能无论如何都要检索数据。
在摘要中,可能有一段时间,移动庞大的数据结构是非常可怕的,但如果你遇到这个问题,那么为每个启动器创建一个新文档可能就是你应该做的。特别是因为我的直觉说我可能比启动者ID和观看者ip更喜欢信息。