为什么赢得我的插入回调运行?

时间:2014-11-16 16:42:12

标签: mongodb

我从mongodb控制台运行以下命令(它通过load()调用的js文件中),但是insert的回调从未运行,即使所有数据库插入按预期发生。谁能明白为什么?

db.oldsets.find().forEach(function (set) {
    var newSet = {
        tunes: [],
        keys: []
    };
    set.tunes.forEach(function (arr) {
        if (newSet) {
            var tune = db.oldtunes.findOne({
                _id: arr.tune
            })
            var newTune = db.getSiblingDB('jnr_local').tunes.findOne({
                sessionId: tune.sessionId
            })
            if (newTune) {
                newSet.tunes.push(newTune._id);
                newSet.keys.push(arr.root + tune.mode);
            } else {
                newSet = null;
            }
        }
    })
    print('out') // outputs for every iteration
    if (newSet) {
        db.sets.insert(newSet, function (err, doc) {
            print('in') // never outputs
            db.practices.insert({
                type: 'set',
                // srcId: doc[0]._id,
                stickyness: 0
            });    
        }); 

    } else {
        print('else') // never outputs
        db.dodgySets.insert(set); 
    }
});

1 个答案:

答案 0 :(得分:1)

看起来你正在混合node.jsmongodb shell。在mongodb shell中,所有代码都是同步的并逐行运行。

因此db.sets.insert只会返回插入的文档。

因此,请尝试按以下步骤重写:

if (newSet) {
      insertedSet = db.sets.insert(newSet);
      print('in') // never outputs
      db.practices.insert({
        type: 'set',
        srcId: insertedSet._id,
        stickyness: 0
      });    
 } 

希望这有帮助!