如何在MongoDB和sails.js中使用集合?

时间:2015-07-22 15:59:12

标签: mongodb sails.js waterline

问题:

我想从一个嵌套在另一个模型中的模型中获取一个属性。

我的解决方案:

我的应用程序中有两个模型,一个是用户,另一个是事件:

用户:

attributes: {
    name: 'STRING',
    email: 'STRING',
    events: {
        collection: 'event',
        via: 'author'
    }
}

事件:

attributes: {
    date: 'STRING',
    time: 'STRING',,
    other: 'STRING',
    author: {
        model: 'user'
    }
}

一个用户应该能够创建多个事件,其中一个事件只能有一个作者。我真的不知道如何创建事件并显示它们的查询。

目前我正在使用此查询创建一个事件:

var newEvent = {
    date: req.param("date"),
    time: req.param("time"),
    other: req.param("other"),
    author: req.user
}

Event.create(newEvent).exec(function(err, model){
    console.log("New event created");
    console.log(model);
    return res.redirect("/account");
});

这是将作者设置为用户ID,我猜这是对的。这里的一个问题是,我是否还必须在用户模型中更新集合?我猜不是,但我不确定。

我正在使用此查询获取一些随机事件:

Event.find().limit(5).exec(function(err, events) {
    return res.view({
        events: events
    });
});

我希望在ejs-template中获取用户名:

<% for( var i=0; i < events.length; i++) { %>
<li>
    <h3><%- events[i].author.name %></h3>
</li>
<% } %>

但这不起作用。我想我在收集领域做错了但我不知道是什么。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我找到了答案。我将populateAll添加到正在进行连接的查询中。

Event.find().limit(5).populateAll().exec(function(err, events) {
    return res.view({
        events: events
    });
});