如何将数组赋给变量。我可以返回我想要的文档,但无法在特定字段中具体获取数组中的所有元素。这个字段叫做“likes”。
我要筛选文档的查询:

Posts.find({}, {owner: Meteor.user()})

我想从posts集合中检索名为'likes'的数组字段中的所有元素。(likes字段中的每个元素都是一个对象id)
我尝试了各种各样的操作符,比如'likes'字段中的$all和$in,并在console.log中进行了测试,但是我无法获得ID。根据mongo文档,我需要在操作符中指定一个元素,但我不希望这样。我只想要里面的任何东西。
var likers = Posts.find({}, {owner: Meteor.user()}, {likes: {$in: [] }})

基本上,我试图从“likes”字段中检索所有元素,以便我可以进行另一个查询以返回结果。
我正在运行流星0.9+

最佳答案

试试看:

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 ]

关于mongodb - 检索mongoDB中数组中的所有元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26281323/

10-11 12:57