【发布时间】:2018-09-27 11:44:25
【问题描述】:
我刚刚将我的 Web 应用程序推送到我的产品服务器上,我发现了一个令人惊讶的问题:
var username = 'foo';
var User = this.db.model('User', UserSchema);
User.findOne({ $or: [ { username: username }, { email: { value: username } } ] }, 'id', function(err, Doc) {
if (err) {
console.log(err);
}else if (Doc) {
console.log('OK');
}else {
console.log('Any result');
}
});
这个完全相同的代码适用于我的本地主机,但不适用于我的产品服务器(我进入生产服务器上的else 条件和本地主机上的else if (Doc))。
我在findOne 调用之前打印了我的变量username,然后我手动检查,这个用户名确实存在。
如果我删除 $or 运算符并仅在 username 上应用条件,它会起作用!这证明了 $or 运算符应对此失败负责。
我在两个环境 ("mongoose": ">=3.5.4") 上以相同的方式更新我的节点模块。
我的 mongoDB 版本在两个环境中是相同的:
db version v2.0.4, pdfile version 4.5
git version: nogitversion
我的本地服务器:ubuntu。
我的产品服务器:debian。
我们该如何解释呢?
【问题讨论】:
-
您的生产服务器上的 MongoDB 版本是什么?
-
两者相同:
db version v2.0.4, pdfile version 4.5 git version: nogitversion -
第二行的
'id' function...部分是怎么回事?错字? -
是的,抱歉,这里忘记了“,”,但我的原始代码中没有。