猫鼬:$或运营商的错误?

时间:2015-11-02 20:11:37

标签: node.js mongodb mongoose mongodb-query

我在使用 $或运算符时遇到了一些问题。我正在制作有点复杂查询,如下所示:

Tag.findOne({  
    '$and' : [ { 
        '$or' : [ { 
                'number' : tags[i] 
            }, { 
                'title.english' : tags[i] 
            }, { 
                'title.japanese' : tags[i] 
            } ] } , {
        'properties.status' : 'published'
    } ] }, 
function(e, tag) {
//...

我的架构如下所示:

var tagSchema = new Schema({
    title: {
        english: { type: String, required: true, trim: true, unique: true, max: 50 },
        japanese: { type: String, required: true, trim: true, unique: true, max: 50 },
        alternative: [{ type: String, trim: true, max: 50 }]
},
//...
     number: Number,
});

如果我只是在'数字'等于标签[i] 时使用它,我会得到一个结果,但标题属性。 如果我现在删除

{ 'number' : tags[i] }, 

标题属性都有效。当我使用'_ id'属性而不是'number'时,我遇到了同样的问题,我真的没有看到问题。

那么此查询的问题是什么?

1 个答案:

答案 0 :(得分:1)

{ 'number' : isNaN(tags[i]) ? 0 : tags[i] },替换为NaN

因此,如果标记不是数字,那么您在尝试转换时就不会出错。如果是0我使用了number,但您可以使用任何无法显示为each属性的值。