【发布时间】:2018-08-24 15:40:53
【问题描述】:
我有以下数据结构:
收藏书籍:
{
_id: "ajafsoaifj3341",
title: "Hello World",
poems: [
{
id: "12fjenofnoi23",
addedAt: "2018-03-12...."
},
{
id: "563jdfb34jfrr",
addedAt: "2018-03-10...."
},
{
id: "78a1ewqeqweq",
addedAt: "2018-03-08...."
}
]
}
诗集:
{
_id: "563jdfb34jfrr",
title: "How to Join",
author: "Smith"
addedAt: "2017-12-21..."
}
我需要加入这两个集合才能得到这首诗的标题。比如:
{
_id: "ajafsoaifj3341",
title: "Hello World",
poems: {
id: "12fjenofnoi23",
addedAt: "2018-03-12....",
title: "How to Join"
}
}
我喜欢这样的例子:
//SERVER
import { Poems } from '../imports/collections/poems';
import { Books } from '../imports/collections/books';
Meteor.publish('booksWithPoems', function (bookId) {
const book = Books.findOne({ _id: bookId });
return [
Books.find({ _id: bookId }),
Poems.find({
_id: {
$in: book.poems.id
}
})
];
});
//CLIENT
export default withTracker(props => {
const bookSubscription = Meteor.subscribe('booksWithPoems', props.editBookId);
return {
editedBook: Books.findOne({}),
editedPoems: Poems.find({}).fetch(),
bookLoaded: bookSubscription.ready()
};
})(connect(mapStateToProps, {
...
})(withRouter(BookEditor)));
但是 this.props.editedPoems 是未定义的。这里有什么问题?
也许这是更好的方法。如果您能帮助我处理服务器和客户端代码,我将不胜感激。我是 Meteor/Mongo 世界的新手。
最后一条评论。我不需要诗歌文档中的所有数据,只需要“标题”。谢谢!
【问题讨论】:
-
您需要一些独特的东西才能加入。看看这个关于如何在 mongodb docs.mongodb.com/manual/reference/operator/aggregation/lookup 中加入
-
能否添加
Poem和Book的架构?我假设您想获取与一本书相关的所有诗歌,对吧? -
你是对的,Jankapunkt。我刚刚更新了诗歌集的结构。我希望现在更清楚了。 :)
标签: mongodb join meteor collections