(mongoDB)查找空值或空值

时间:2017-11-15 09:30:56

标签: javascript node.js mongodb

如何使用空值创建mongodb集合(db.collection.find)?

目前我有:

function test(s) {
    if (!s) {
        return null;
    } else {
        return s;
    }
}

var content = {
    date: { 
        from: '2017-10-15', 
        to: '2017-11-15' 
    },

    'name': 'some text', //this can be null or empty
    'text': 'some other text' //this can be null or empty
}

col.find({
    "date": {
        $gte: new Date(content.date.from),
        $lte: new Date(content.date.to)
    },

    "name": {
        $ne: {
            $type: null
        },

        $eq: test(content.name)
    },

    "text": {
        $ne: {
            $type: null
        },

        $eq: test(content.text)
    },
}).toArray((err, items) => {
    console.log(items)
});

但它返回一个空数组,因为" name"或"文字"是null /空字符串, 我希望它只查询具有指定内容的值或忽略它(如content.name是其中的内容或其为空)

我怎么得到它?我已经搜索了......但没有找到一些东西

谢谢!

(已经是testet mongoDB : multi value field search ignoring null fields

版本: 节点:8.9.0 (npm)mongodb:2.2.33 mongodb:3.4

2 个答案:

答案 0 :(得分:0)

尝试使用$和$或运算符。像。的东西。

col.find({
$and:[
    {"date": {$gte: new Date(content.date.from),$lte: new Date(content.date.to)}},
    {"$or":[{"name": {$ne: {$type: null}}},{"name":test(content.name)}]},
    {"$or":[{"text": {$ne: {$type: null}}},{"text":test(content.text)}]}
 ]
}).toArray((err, items) => {
  console.log(items)
});

答案 1 :(得分:0)

col.find({
    $and: [
        {
            $and: [
                { 
                    "date": {
                        $gte: new Date(content.date.from)
                    }
                },
                { 
                    "date": {
                        $lte: new Date(content.date.to)
                    }
                },
            ]
        },
        {
            $or: [
                { 'name': null },
                { 'name': content.name }
            ]
        },
        {
            $or: [
                { 'text': null },
                { 'text': content.text }
            ]
        }
    ]
})

编辑:

col.find({
    $and: [
        {
            $and: [
                { 
                    "date": {
                        $gte: new Date(content.date.from)
                    }
                },
                { 
                    "date": {
                        $lte: new Date(content.date.to)
                    }
                },
            ]
        },
        {
            $or: [
                { 'name': null },
                { 'name':'' }
                { 'name': content.name }
            ]
        },
        {
            $or: [
                { 'text': null },
                { 'text': '' },
                { 'text': content.text }
            ]
        }
    ]
})

nullempty不同,您需要在查询中为空字符串添加一个条件。

Logical Query Operators