我从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);
}
});
答案 0 :(得分:1)
看起来你正在混合node.js
和mongodb 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
});
}
希望这有帮助!