Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用简化的数组数据发布游标_Mongodb_Meteor_Minimongo - Fatal编程技术网

Mongodb 使用简化的数组数据发布游标

Mongodb 使用简化的数组数据发布游标,mongodb,meteor,minimongo,Mongodb,Meteor,Minimongo,我需要向用户发布帖子的简化版本。每个帖子都包含一个“喜欢”数组,其中包含喜欢/不喜欢该帖子的所有用户,例如: [ { _id: user_who_liked, liked: 1 // or -1 for disliked }, .. ] 我正在尝试向订阅数组的用户发送一个简化版本,该数组只包含他/她的类: 我知道我可以改变结构,包括每个用户的“喜欢”数据,但帖子通常设计为短暂的,因此,最好将该数据保存在每篇文章中。您需要使用此特定

我需要向用户发布帖子的简化版本。每个帖子都包含一个“喜欢”数组,其中包含喜欢/不喜欢该帖子的所有用户,例如:

[
    { 
        _id: user_who_liked, 
        liked: 1 // or -1 for disliked 
    }, 
    ..
]
我正在尝试向订阅数组的用户发送一个简化版本,该数组只包含他/她的类:


我知道我可以改变结构,包括每个用户的“喜欢”数据,但帖子通常设计为短暂的,因此,最好将该数据保存在每篇文章中。

您需要使用此特定语法来查找具有
likes
字段的文章,该字段包含一个数组,该数组至少包含一个嵌入文档,该字段的值为
this.userId

Meteor.publish("posts", function (cat) {
  return Songs.find({
    category: cat,
    postedAt: { $gte: Date.now() - 3600000 },
    "likes._id":this.userId
  },{
    fields:{
      likes:0
    }
  });
});


编辑:答案以前使用的是
$elemMatch
,这是不必要的,因为我们只需要对一个字段进行筛选。

将我的答案编辑为更简单的方法。这种方法有效,但不会使用
$elemMatch
放弃对oplog?的支持。或者这仅仅发生在客户端查询中?对不起,我完全忘记了我在这里试图实现的目标。我使用
forEach
的第一种方法是过滤每个帖子上的数据。这样,服务器将发送一个经过转换的单字段“likes”数组,而不是用户不需要的100个元素。这是我不知道如何实现的方法。在这种情况下,您应该查看字段选项:参见我的编辑,我从返回的文档中完全删除了
likes
数组。
Meteor.publish("posts", function (cat) {
  return Songs.find({
    category: cat,
    postedAt: { $gte: Date.now() - 3600000 },
    "likes._id":this.userId
  },{
    fields:{
      likes:0
    }
  });
});