在查看了几本书,mongo db参考和其他stackoverflow问题后,我似乎无法正确查询此查询。
我有以下数据结构:
帖子收藏:
{
"content" : "...",
"comments" : [
{
"author" : "joe",
"score" : 3,
"comment" : "nice post"
},
{
"author" : "bob",
"score" : 5,
"comment" : "nice"
}]
}
我想要获得的是在Handlebars帮助内的数组的每个对象内的所有 author 名称,而不是在控制台中。所以我会有类似的东西:
...
commentsAuthors: function() {
return Collection.find({...});
}
更新: 我决定将我的数组减少到只有一个字符串数组,我稍后会这样查询:
新数组:
{
"content" : "...",
"comments" : ["value1", "value2", "..."]
}
MeteorJS Handlebars助手:
Template.courseEdit.helpers({
comments: function(){
var cursor = Courses.find({"_id": "8mBATtGyyWsGr2PwW"}, {"comments": 1, "_id": 0}).fetch();
return cursor.map(function(doc, index, cursor){
var comment = doc.comments;
console.log(comment);
return comment;
});
}
});
此时,我可以使用此{{#each}}...{{/each}}
在我的视图中呈现整个数组:
<ul class="list-unstyled">
{{#each comments}}
<li class="pl-14"><i class="icon-checkmark"></i> {{this}}</li>
{{/each}}
</ul>
但是我将整个数组放在一个列表项中。
如何为每个Array字符串创建单独的列表项?
提前致谢。
答案 0 :(得分:2)
应该如此简单(用您的收藏名称替换posts
):
db.posts.distinct("comments.author")
或者如果您每个帖子都需要它:
db.posts.aggregate([
{ $unwind: "$comments" },
{ $group: { "_id": "$_id", authors: { "$addToSet": "$comments.author"} } }
])
答案 1 :(得分:0)
您只能通过限制字段来获取某些字段
db.collection.find({"content" : "..."},{"comments.author":1})