为我的数据库添加种子,或以编程方式在 ApostropheCMS 中插入数据
Seed my database, or insert data programatically in ApostropheCMS
我想用大量博客文章对我的数据库做一个非常快速和肮脏的 "seed"...我很高兴使用 Mongo 游标等,但是不能'似乎找不到一个有效的生命周期方法来 "plonk" 将此代码放入...这一切都是为了概念验证,因此不需要完美!
有人能给我指出正确的方向吗?我似乎无法在 construct
方法中访问 req
,所以不能 self.insert
那里...
查看 apostrophe-tasks 模块。这使您可以轻松地在自己的模块中添加命令行任务,并轻松获得具有完全管理员权限的 req
对象来完成此类工作。
您的模块可以从 construct
:
中调用 self.apos.tasks.add
self.apos.tasks.add(self.__meta.name, 'insert-stuff', function(apos, argv, callback) {
var req = self.apos.tasks.getReq();
return self.find(req, { cool: true }).toArray().then(function(err, pieces) {
if (err) {
return callback(err);
}
// etc., do things with `pieces`, then invoke callback(null);
});
};
根据@Tom Boutell 的回复,这是我的最终工作代码...
construct: function(self, options) {
self.apos.tasks.add(self.__meta.name, 'insert-blog-articles', function(apos, argv, callback) {
console.info(`Running ${self.__meta.name}:insert-blog-articles`)
if(!argv.create) throw new Error('Please pass a number of articles to create using --create=n')
const req = self.apos.tasks.getReq()
const numberToCreate = Array.from(Array(argv.create).keys())
numberToCreate.forEach(item => {
let blogPost = self.newInstance()
blogPost = Object.assign({}, blogPost, {
title: 'Post about cats!',
image: 'https://www.vetbabble.com/wp-content/uploads/2016/11/hiding-cat.jpg',
published: true,
testData: true
})
self.insert(req, blogPost)
.then(result => { console.info('Inserted doc!', result) })
})
})
self.apos.tasks.add(self.__meta.name, 'show-hide-articles', function(apos, argv, callback) {
console.info('Running task show-hide-articles', argv)
const set = argv.show ? { published: true } : { published: false }
self.apos.docs.db.update(
{ type: 'apostrophe-blog', testData: true },
{ $set: set },
{ multi: true }
)
.then(result => {
argv.show && console.info('Docs updated, now showing posts')
!argv.show && console.info('Docs updated, now hiding posts')
})
.catch(error => { console.warn('Error updating docs', error) })
})
}
哪个(粗略地)给了我两个任务:
node app apostrophe-blog:insert-blog-articles --create=100
--> 为我创建 100 篇博客文章
node app apostrophe-blog:show-hide-articles --show
--> 将这些文章 published
标志设置为 true 或 false,具体取决于 arg
我想用大量博客文章对我的数据库做一个非常快速和肮脏的 "seed"...我很高兴使用 Mongo 游标等,但是不能'似乎找不到一个有效的生命周期方法来 "plonk" 将此代码放入...这一切都是为了概念验证,因此不需要完美!
有人能给我指出正确的方向吗?我似乎无法在 construct
方法中访问 req
,所以不能 self.insert
那里...
查看 apostrophe-tasks 模块。这使您可以轻松地在自己的模块中添加命令行任务,并轻松获得具有完全管理员权限的 req
对象来完成此类工作。
您的模块可以从 construct
:
self.apos.tasks.add
self.apos.tasks.add(self.__meta.name, 'insert-stuff', function(apos, argv, callback) {
var req = self.apos.tasks.getReq();
return self.find(req, { cool: true }).toArray().then(function(err, pieces) {
if (err) {
return callback(err);
}
// etc., do things with `pieces`, then invoke callback(null);
});
};
根据@Tom Boutell 的回复,这是我的最终工作代码...
construct: function(self, options) {
self.apos.tasks.add(self.__meta.name, 'insert-blog-articles', function(apos, argv, callback) {
console.info(`Running ${self.__meta.name}:insert-blog-articles`)
if(!argv.create) throw new Error('Please pass a number of articles to create using --create=n')
const req = self.apos.tasks.getReq()
const numberToCreate = Array.from(Array(argv.create).keys())
numberToCreate.forEach(item => {
let blogPost = self.newInstance()
blogPost = Object.assign({}, blogPost, {
title: 'Post about cats!',
image: 'https://www.vetbabble.com/wp-content/uploads/2016/11/hiding-cat.jpg',
published: true,
testData: true
})
self.insert(req, blogPost)
.then(result => { console.info('Inserted doc!', result) })
})
})
self.apos.tasks.add(self.__meta.name, 'show-hide-articles', function(apos, argv, callback) {
console.info('Running task show-hide-articles', argv)
const set = argv.show ? { published: true } : { published: false }
self.apos.docs.db.update(
{ type: 'apostrophe-blog', testData: true },
{ $set: set },
{ multi: true }
)
.then(result => {
argv.show && console.info('Docs updated, now showing posts')
!argv.show && console.info('Docs updated, now hiding posts')
})
.catch(error => { console.warn('Error updating docs', error) })
})
}
哪个(粗略地)给了我两个任务:
node app apostrophe-blog:insert-blog-articles --create=100
--> 为我创建 100 篇博客文章
node app apostrophe-blog:show-hide-articles --show
--> 将这些文章 published
标志设置为 true 或 false,具体取决于 arg