在 Meteor 启动时向集合中插入数据

Insert data in collection at Meteor's startup

我想在 Meteor 启动时插入数据。 (在 JSON 文件之后)

在启动时,我创建了一个新帐户,我想插入数据并link它到这个帐户创建后。

这是在启动时创建新帐户的代码:

if(!Meteor.users.findOne({emails: { $elemMatch: { address: "test@test.com"}}})){
    var id = Accounts.createUser({ email: "test@test.com", password: "1234", profile: { name: 'Test' } });
    Meteor.users.update({_id: id }, { $set: { admin: false }});
}

然后,我需要插入数据并将其 link 插入到此帐户及其 ID。 (在不同的集合中)。

所以我尝试做类似的事情,但显然它没有用:

UserData = new Mongo.Collection('user_data');

    if(!Meteor.users.findOne({emails: { $elemMatch: { address: "test@test.com"}}})){
        var id = Accounts.createUser({ email: "test@test.com", password: "1234", profile: { name: 'Test' } });
        Meteor.users.update({_id: id }, { $set: { admin: false }});
        UserData.insert({
            createdBy: id,
            firstname: "test",
            /* ... */
        });
    }

编辑

抱歉没说清楚。

真正的问题是:

UserData = new Mongo.Collection('user_data'); 

声明在另一个文件中,所以我不能像上面那样做。

因为它不在同一个文件中,所以我试图将获得 "test@test.com" 的 userId 作为电子邮件(该帐户的电子邮件在启动时创建)。一旦我得到它,我想在 "createdBy: ID_HERE".

中使用它

好的,你会想看看 Structuring your application。您必须使带有定义的文件更早加载,或者带有 fixture 的文件稍后加载。

通常你的 collections 在 lib/ 里面,你的 fixtureserver/fixtures.js.

因此,如果您将插入代码放入 server/fixtures.js,它将起作用。