如何将数组赋值给变量。我能够返回我想要的文档,但不能专门获取特定字段内的数组中的所有元素。该字段称为“喜欢”。
我想要过滤我想要的文件:
Posts.find({}, {owner: Meteor.user()})
我想从Posts集合中检索名为'likes'的数组字段中的所有元素。 ('likes'字段中的每个元素都是一个对象ID)
我尝试了各种运营商,例如'all'字段中的$ all和$ in,并在console.log中进行了测试,但我无法获得ID。根据mongo文档,我需要在运算符中指定一个元素,但我不希望这样。我只想要内心的任何东西。
var likers = Posts.find({}, {owner: Meteor.user()}, {likes: {$in: [] }})
基本上,我试图从'喜欢'字段中检索所有元素,这样我就可以进行另一个查询来返回结果。
我正在运行流星0.9 +
答案 0 :(得分:5)
尝试一下:
var myPosts = Posts.find(
{owner: Meteor.user()},
{fields: {likes: 1}}
).fetch()
var myLikes = _.chain(myPosts)
.pluck('likes')
.flatten()
.uniq()
.value();
首先,我们获取当前用户所有者的所有帖子。每个帖子都会包含_id
和likes
数组。接下来我们通过以下方式提取所有喜欢的内容:
likes
。这为我们提供了一系列数组。uniq
,因此我们只有独特的喜欢(不是必需的,但可以是优化)。然后,您可以在后续查询中使用myLikes
。例如:
Likes.find({_id: {$in: myLikes}})
以下是myPosts
为空的情况下的一些测试数据:
var myPosts = [
{_id: 1, likes: [1, 2, 3]},
{_id: 2, likes: [2, 3, 4]},
{_id: 3, likes: [4, 5, 6]}
];
在这种情况下,myLikes
将是:[ 1, 2, 3, 4, 5, 6 ]
答案 1 :(得分:1)
您可以指定光标所包含的字段,以便将其限制为likes
字段:
var allLikes = Posts.find({
owner: Meteor.user()
}, {
fields: {likes: 1},
}).fetch();
这将为您提供所有帖子的数组,其中每个帖子仅包含likes
数组:
[{
likes: ['A', 'B', 'C'],
}, {
likes: ['D', 'E'],
}];
等。现在,我知道你想要一个包含所有objectID的单个数组。为此,您可以使用下划线转换数组。有许多方法可以获得结果,例如:
var likes = _.reduce(allLikes, function(memo, post) {
return memo.concat(post.likes);
}, []);
答案 2 :(得分:0)
我刚刚意识到,在Posts.find查询中,我必须插入一个空的标准才能工作。所以这一变化导致了以下结果。
var myPosts = Posts.find(
{},
{owner: Meteor.user()},
{fields: {likes: 1}}
).fetch()
无论哪种方式,如果没有你的输入我就无法得到这个结果,所以加上一个给你大卫!