如何使用Mongoose

时间:2015-06-07 18:21:37

标签: json node.js mongodb mongoose

我有一些问题,这是什么让它变得棘手,所以......

我正在使用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' }
]

任何帮助非常感谢

2 个答案:

答案 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