使用简化的数组数据发布游标
Publish cursor with simplified array data
我需要向用户发布 posts 的简化版本。每个 post 包含一个 'likes' 数组,其中包含 liked/disliked 且 post 的所有用户,例如:
[
{
_id: user_who_liked,
liked: 1 // or -1 for disliked
},
..
]
我正在尝试向订阅数组的用户发送一个简化版本,其中仅包含 his/her 个赞:
Meteor.publish('posts', function (cat) {
var _self = this;
return Songs.find({ category: cat, postedAt: { $gte: Date.now() - 3600000 } }).forEach(function (post, index) {
if (_self.userId === post.likes[index]._id) {
// INCLUDE
} else
// REMOVE
return post;
})
});
我知道我可以更改结构,包括每个用户中的 'likes' 数据,但 post 通常设计为短期存在,最好将这些数据保存在每个 post.
您需要使用此特定语法来查找具有 likes
字段的帖子,该字段包含一个数组,该数组包含至少一个嵌入文档,该文档包含值为 this.userId
.[=15 的字段=]
Meteor.publish("posts", function (cat) {
return Songs.find({
category: cat,
postedAt: { $gte: Date.now() - 3600000 },
"likes._id":this.userId
},{
fields:{
likes:0
}
});
});
http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element
编辑:答案之前使用 $elemMatch
这是不必要的,因为我们只需要在一个字段上进行过滤。
我需要向用户发布 posts 的简化版本。每个 post 包含一个 'likes' 数组,其中包含 liked/disliked 且 post 的所有用户,例如:
[
{
_id: user_who_liked,
liked: 1 // or -1 for disliked
},
..
]
我正在尝试向订阅数组的用户发送一个简化版本,其中仅包含 his/her 个赞:
Meteor.publish('posts', function (cat) {
var _self = this;
return Songs.find({ category: cat, postedAt: { $gte: Date.now() - 3600000 } }).forEach(function (post, index) {
if (_self.userId === post.likes[index]._id) {
// INCLUDE
} else
// REMOVE
return post;
})
});
我知道我可以更改结构,包括每个用户中的 'likes' 数据,但 post 通常设计为短期存在,最好将这些数据保存在每个 post.
您需要使用此特定语法来查找具有 likes
字段的帖子,该字段包含一个数组,该数组包含至少一个嵌入文档,该文档包含值为 this.userId
.[=15 的字段=]
Meteor.publish("posts", function (cat) {
return Songs.find({
category: cat,
postedAt: { $gte: Date.now() - 3600000 },
"likes._id":this.userId
},{
fields:{
likes:0
}
});
});
http://docs.mongodb.org/manual/tutorial/query-documents/#match-an-array-element
编辑:答案之前使用 $elemMatch
这是不必要的,因为我们只需要在一个字段上进行过滤。