更可靠的循环来更新Mongo中的ObjectID?

时间:2015-12-03 19:56:22

标签: mysql node.js mongodb

我正在从SQL迁移到NOSQL,但仍希望维护单独的记录,并在某些情况下使用ObjectID进行链接。我有这个循环,它在某种程度上有效。

router.get('/col', function(req, res, next) {
var stream = Record.find().stream();

stream.on('data', function (doc) {
    if(doc.oldcolid){
      Collection.findOne({da: doc.oldcolid}, function(err, col){
          doc.collectionId = col._id
          doc.save()
          console.log(col.name)
      })
    }


})

stream.on('error', function (err) {
  console.log(err)
})

stream.on('close', function () {
  console.log("done")
})

});

然而,它似乎完成并错过了许多记录。

> db.records.count({collectionId: null})
12130
> db.records.count({collectionId: {$exists: true}})
5882
> db.records.count({oldcolid: {$exists: true}})
18012

我将MySQL数据库中的旧ID存储在两个集合中以进行链接。没有明显的错误,但它似乎一直都会出现问题。我似乎也没有点击('关闭')功能。

1 个答案:

答案 0 :(得分:0)

好的,所以反过来思考这个问题就更简单了。

select 
 oitm.itemcode as 'Asset No', 
 oitm.itemname as 'Asset Description',
 oitm.assetSerNo as 'Serial No'
from oitm x
WHERE
 EXISTS(
  select TOP 1 1 
  from oitm y
   inner join rdn1 z on y.assetserno = z.serialnum
  WHERE
   y.itemtype = 'F'
   and y.asststatus = 'A'
   and y.assetSerNo = x.assetSerNo 
  HAVING count(y.assetserno)>count(z.serialnum)
)

减少操作,减少麻烦。