如何在Node / MongoDB中播种依赖的数据

我正在尝试使用objectID来build立一对多关系的MongoDB数据库。 像下面这样:

var postSchema = mongoose.Schema({ name: {type: String, required: true, unique: true}, description: {type: String}, userlikes: [{type: mongoose.Schema.Types.ObjectId, ref: 'Users'}] }); 

这个同步实现看起来像这样(伪代码):

 openConnection() cleardb() users = createUsers() post = createPost(users) 

使用节点我需要嵌套每个这些调用,这些调用变得混乱,并使对象的重复使用困难(我可能想创build更多的依赖对象之后)。 我曾看过asynchronous,但在这种情况下似乎没有太多的帮助 – 我可以使用async.waterfall,但是这会给我类似于嵌套解决scheme的东西只扁平成一个数组。

在种子相关数据时,如果可以创build数据对象,然后假定它们存在以build立后续数据结构,那么显然会有所帮助。 显然这不是真的发生在一个asynchronous的方法。 我在这里错过了什么?

我会假设,对于API的广泛使用的节点,这将是一个设置数据testing的常见挑战,但我找不到一个优雅的解决schemelogging在任何地方。

任何人都可以指出我在节点设置中如何解决此问题的示例实现?

使用asynchronous可以非常方便。
所有的业务逻辑/任务在一天结束时只是一系列的操作。 瀑布是对您的解决scheme非常有用的抽象。

例如:seed.js

 var User = require('../path/to/your/models/User'); var Post = require('../path/to/your/models/Post'); var DB = require('../path/to/your/database/boot/module'); var config = require('../path/to/your/configuration'); function startDB(config, callback) { DB.start(config, callback); } function createUsers(userParams, callback) { User.save(userParams, callback); } function createPost(users, callback) { Post.save(users, callback); } function resolvedCallback(err, posts) { if (err) return your-error-handling-here; console.log(posts); DB.cleanup(console.log.bind(null, 'clean up finished: ')); } async.waterfall([ async.constant({ db: config.dbOpts}), startDB, // we don't need the wrapper, we could use DB.start createUsers, createPost ], resolvedCallback); 

如果你正在使用一些testing框架(mocha / tape),你可以在所有的testing之前初始化数据库,并且在所有的testing之前/之后进行清理。

干杯