前言

最近在做一些 mongodb 的查询记一下笔记。

一、 $elemMatch 如何查询字段不为指定值的记录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
db.x.insert({"index": [{"id": "index-1", "value": "1"}]})
db.x.insert({"index": [{"id": "index-2", "value": "2"}]})
db.x.find({
    "index": {
        "$not": {
            "$elemMatch": {
                "id": "index-1"
            }
        }
    }
})
db.x.find({
    "index": {
        "$not": {
            "$elemMatch": {
                "id": "index-2"
            }
        }
    }
})

二、$elemMatch 查询字段值为空值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
db.x.insert({"index": [{"id": "index-1", "value": ""}]})
db.x.insert({"index": [{"id": "index-1", "value": null}]})
db.x.find({
    "index": {
        "$elemMatch": {
            "id": "index-1",
            "$or": [
                {"value": ""},
                {"value": null}
            ]
        }
    }
})

三、$elemMatch 查询字段值不为指定值,或者值对且另一个字段为空值的记录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
db.x.find({
    "$or": [
        // 匹配字段 id 值不为 index-1 的记录
        {
            "index": {
                "$not": {
                    "$elemMatch": {
                        "id": "index-1"
                    }
                }
            }
        },
        // 匹配字段 id 值为 index-1 的记录,字段 value 去匹配空值
        {
            "index": {
                "$elemMatch": {
                    "id": "index-1",
                    "$or": [
                        {"value": ""},
                        {"value": null}
                    ]
                }
            }
        }
    ]
})

四、$elemMatch 查询字段值为指定值,且另一个字段不为空值的记录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
db.x.find({
    "index": {
        "$elemMatch": {
            "id": "index-1",
            "$and": [
                {"value": {"$ne": ""}},
                {"value": {"$ne": null}}
            ]
        }
    }
})

五、参考