在mongoDB中检索数组中的所有元素

在mongoDB中检索数组中的所有元素,mongodb,meteor,Mongodb,Meteor,如何将数组分配给变量。我能够返回我想要的文档,但无法具体获取特定字段中数组中的所有元素。该字段称为“likes” 用于筛选所需文档的查询: Posts.find({}, {owner: Meteor.user()}) 我想从Posts集合中检索名为“likes”的数组字段中的所有元素。(likes字段中的每个元素都是一个对象ID) 我尝试了各种操作符,例如'likes'字段的$all和$in,并在console.log中进行了测试,但我无法获得ID。根据mongo文档,我需要在操作符中指定一个

如何将数组分配给变量。我能够返回我想要的文档,但无法具体获取特定字段中数组中的所有元素。该字段称为“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”字段中检索所有元素,以便进行另一个查询以返回结果


我正在运行meteor 0.9+

您可以指定希望光标包含的字段,因此可以将其限制为
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);
}, []);
尝试一下:

var myPosts=Posts.find(
{所有者:Meteor.user()},
{字段:{likes:1}}
).fetch()
var myLikes=u0.chain(myPosts)
.pluck(‘喜欢’)
.flatte()
.uniq()
.value();
首先,我们获取当前用户是所有者的所有帖子。每个帖子将包含一个
\u id
和一个
likes
数组。接下来,我们通过以下方式提取所有相似项:

  • 从每个文档中取出每个类似的
    。这就得到了一个数组
  • 将数组的数组展平为单个类似数组
  • 运行
    uniq
    ,这样我们就只有独特的喜好(不是必需的,但可能是一种优化)
  • 然后可以在后续查询中使用
    myLikes
    。例如:

    var likes = _.reduce(allLikes, function(memo, post) {
      return memo.concat(post.likes);
    }, []);
    
    Likes.find({u id:{$in:myLikes}})
    

    以下是一些测试数据,以防
    myPosts
    为空:

    var myPosts=[
    {{u id:1,likes:[1,2,3]},
    {{u id:2,likes:[2,3,4]},
    {{u id:3,喜欢:[4,5,6]}
    ];
    

    在这种情况下,
    myLikes
    将是:
    [1,2,3,4,5,6]
    我刚刚意识到,在Posts.find查询中,我必须插入一个空的条件,它才能工作。因此,这一变化产生了以下结果

    var myPosts = Posts.find(
    {},
    {owner: Meteor.user()},
    {fields: {likes: 1}}
    ).fetch()
    

    不管怎样,如果没有你的投入,我不可能得到这个结果,所以再加上一个给你,大卫

    每个帖子只有一个数组。里面是一个对象ID列表。所以下划线方法是没有必要的,但感谢您指出,我可以记住它,以备将来使用。从一个数组,比如你写的['a','B','C'],我想把它放在一个变量AllLikes中。然后,查询另一个集合表单;本质上,我试图检索“likes”字段数组中的所有值。然后使用这些值查询另一个集合。嗨,大卫,我已经试过了。将myLikes变量放入console.log和另一个查询后,没有返回任何值。可能是由于文档不存在或未发布,
    myPosts
    对您来说是一个空数组。假设我得到了正确的数据结构,
    myLikes
    代码是正确的。我在答案的底部添加了一些测试数据以进行验证。谢谢,所以。该死的。“非常感谢!”戴维德维尔顿,谢谢!我已经找了好几个月了!