标识为

时间:2015-06-10 14:58:22

标签: json mongodb

我想为单元测试导入实际数据库的固定有限子集。所以我用mongo shell将我的数据库导出到mydata.json中。现在我想将这个JSON文件数据准确地读入我的数据库中,同时保留ID。

第一名:我在阅读JSON导出时已经失败了,如何解决这个问题?

if !db?
  mongoose.connect(configDB.url,{auth:{authdb:configDB.authdb}}, (err)->
    if (err)
      console.log(err)
  )
  db = mongoose.connection
  db.on('error', console.error.bind(console, 'connection error:'))
  db.once('open', () ->
    console.log "Database established"
    #Delete all data and seed new data
    SomeModel = require(applicationDir + 'node/models/some.model.js')
    SomeModel.remove({}, (err) ->
      console.log('collection somes removed seeding new one')
      fs.readFile(__dirname + '/../../mongo/seed-for-test/somes.json','utf-8', (err,fileData) ->
        console.log typeof fileData
        fileData = JSON.parse(fileData)
        console.log fileData.length
        # new SomeModel(fileData).save((err) ->
        #   if err?
        #     return console.log err
        #   console.log('somes saved')
        # )
      )
    )
  )

错误

string
undefined:2
{ "_id" : { "$oid" : "551d82e30287751fa2f2dfb2" }, "prooven" : true, "title" :
^
SyntaxError: Unexpected token {
  at Object.parse (native)
  at /Users/MasterG/Desktop/PROJEKTE/lek/specs/backend/mongo.service.spec.js:37:27
  at fs.js:336:14
  at /Users/MasterG/Desktop/PROJEKTE/lek/node_modules/wiredep/node_modules/bower-config/node_modules/graceful-fs/graceful-fs.js:104:5
  at FSReqWrap.oncomplete (fs.js:99:15)

第二 如果我取消注释下部它将起作用还是还有其他我需要做的事情。

修改

导出不会返回有效的json对象数组。导出时必须使用--jsonArray标志。

1 个答案:

答案 0 :(得分:1)

这适用于使用标记--jsonArray导出,但我看起来不对。此外,.json文件的格式也不像以前那么好。我需要添加一些额外的逻辑来检查最后一个条目是否已保存。

ObjectId = require('mongoose').Types.ObjectId
SomeModel = require(applicationDir + 'node/models/some.model.js')

if !db?
  mongoose.connect(configDB.url,{auth:{authdb:configDB.authdb}}, (err)->
    if (err)
      console.log(err)
  )
  db = mongoose.connection
  db.on('error', console.error.bind(console, 'connection error:'))
  db.once('open', () ->
    console.log "Database established"
    #Delete all data and seed new data
    SomeModel.remove({}, (err) ->
      console.log('collection somes removed seeding new one')
      fs.readFile(__dirname + '/../../mongo/seed-for-test/somes.json','utf-8', (err,fileData) ->
        fileData = JSON.parse(fileData)
        for singleFileData in fileData
          singleFileData._id = new ObjectId(singleFileData._id.$oid)
          new SomeModel(singleFileData).save((err) ->
            if err?
              return console.log err
            console.log('somes saved')
          )
      )
    )
  )