短版
要在集合中查找文档,它是
collection.findOne([...], [...])
如何在文档中找到子文档?
长版
我有一个集合条目如下:
db.projects.find()
{
title: 'company.com'
company: 'A Company'
companyID: Random.id()
category: 'website'
starred: false
timeline: {
ideas: {
task: {
name: 'task1'
completed: true
todos: [
{todo: 'a todo', completed: false, todoID: Random.id()}
{todo: 'a todo', completed: false, todoID: Random.id()}
{todo: 'a todo', completed: false, todoID: Random.id()}
]
}
task: {
name: 'task2'
completed: false
todos: [
{todo: 'another todo', completed: false, todoID: Random.id()}
{todo: 'another todo', completed: false, todoID: Random.id()}
{todo: 'another todo', completed: false, todoID: Random.id()}
]
}
}
development: {
...
}
production: {
...
}
}
}
(用咖啡脚本写的)
该条目在我的项目集合中。它在服务器上发布:
服务器/publications.js
Meteor.publish('projects', function() {
return Projects.find();
});
..并由客户订阅:
客户端/projects.js
Meteor.subscribe('projects');
简单的。按预期工作。
接下来,我使用 Session 变量在项目被选中时存储它:
Session.set('selectedProject', this.id);
并在需要时调用它:
Session.get('selectedProject');
一切都好。
现在我想搜索 selectedProject 的想法条目并找到第一个已完成的任务: false。
经过几个小时的阅读,我想我已经接近了以下几点:
({
currentTask: function() {
return Projects.findOne({
_id: Session.get('selectedProject', {
'timeline.ideas.task.completed': false
})
}, {
fields: 'timeline.ideas.task'
});
}
});
我猜 ^ 可能会尝试返回一个项目而不是一项任务?
它返回此错误:
Exception in template helper: Error: Match error: Failed Match.OneOf or Match.Optional validation
理论上它应该是这样的
selectedProject.findOne(....)
我看看在服务器上使用 $elemMatch 吗?还是我错过了一些简单的东西?