我有一些问题,这是什么让它变得棘手,所以......
我正在使用Mongoose和MongoLab,我可以存储数据并检索它很好,但我想要一个允许我做数据库基础种子的系统。
我有为集合创建的模式,但没有运行因为没有数据,所以我似乎无法运行正常的mongoimport,因为尚未创建集合。
我想在节点服务器上添加一些东西,这样如果集合不存在或为空,它会为集合加载一个模式,然后为种子数据插入json。
所以我有这个...
var Club = require('./schemas/Club');
我通常使用Club.find或Club.save等,这些工作正常。
我想对一个需要创建的Club集合中的一系列对象运行保存。
我确实研究了mongoose-fixture但是它没有多年更新,并且可能有一种方法可以做到这一点,而不需要那么多额外的代码,因为我已经定义了模式,并且json数组已经准备就绪。
这是我列出的成功事件,当我想要进行检查和导入时。
mongoose.connection.on('open', function () {
console.log('mongoose.connection.opened');
});
另外,要考虑,如果我想创建两个集合,并且当它为第一个集合中的项生成ObjectId()时,我可以想象想要将第二个集合中的那些用作参考。
现在假设Club对象只有一个字符串属性。
// contents of data/club.json
[
{ 'name' : 'Barcelona' },
{ 'name' : 'Real Madrid' },
{ 'name' : 'Valencia' }
]
任何帮助非常感谢
答案 0 :(得分:13)
如果我理解得很清楚,您只需要将一个JSON文档从Mongoose上传到MongoDB集合。鉴于您的模型名为Club
,您可以通过Club.collection
访问原始驱动程序方法。并使用insertMany
来实现您的目标。
这是一个独立的例子(有趣的东西在最后):
> var mongoose = require('mongoose')
> var assert = require('assert')
> mongoose.connect('mongodb://localhost/test');
> var Schema = mongoose.Schema
> var clubSchema = new Schema({
... name: String,
... })
> var Club = mongoose.model('Club', clubSchema)
// Now, the interesting part:
> data = [
... { 'name' : 'Barcelona' },
... { 'name' : 'Real Madrid' },
... { 'name' : 'Valencia' }
... ]
> Club.collection.insertMany(data, function(err,r) {
... assert.equal(null, err);
... assert.equal(3, r.insertedCount);
...
... db.close();
... })
从Mongo Shell查看:
> db.clubs.find()
{ "_id" : ObjectId("5574b464b680174d79e37601"), "name" : "Barcelona" }
{ "_id" : ObjectId("5574b464b680174d79e37602"), "name" : "Real Madrid" }
{ "_id" : ObjectId("5574b464b680174d79e37603"), "name" : "Valencia" }
答案 1 :(得分:-1)
有时shell脚本可能会有所帮助:
for filename in *; do mongoimport -d mydb -c $filename --jsonArray done
另请参阅:MongoDB Bulk import using mongoimport from Windows folder