MongoDB - 检查文档中的字段是否存在值

Pi *_*rse 6 mongodb mongodb-query

我有一个集合,文档如下所示:

/* 0 */

{
    "_id" : ObjectId("5320b1c723bc746084fa7107"),
    "channels" : [ 
        3, 
        4
    ]
}


/* 1 */

{
    "_id" : ObjectId("5320b1c723bc746084fa7107"),
    "channels" : [ ]
}
Run Code Online (Sandbox Code Playgroud)

我想形成一个查询,以便我想要所有文件,其中渠道有一些价值而且不是空的.

我试过这个:

db.event_copy.find({"channels":{$exists:true}})
Run Code Online (Sandbox Code Playgroud)

但是这仍然会返回我在通道中没有值的文档.

Nei*_*unn 15

你需要$ size运算符.要查找没有元素的内容,请执行以下操作

db.collection.find({ channels: {$size: 0} })
Run Code Online (Sandbox Code Playgroud)

如果你知道你有一个固定的大小,那么这样做

db.collection.find({ channels: {$size: 2} })
Run Code Online (Sandbox Code Playgroud)

否则用$ not反转

db.collection.find({ channels: {$not:{$size: 0}} })
Run Code Online (Sandbox Code Playgroud)

你可以结合$和:

db.collection.find({ $and: [ 
    { channels: {$not:{$size: 0}} },
    { channels: {$exists: true } }
]})
Run Code Online (Sandbox Code Playgroud)


Pi *_*rse 4

我用这个做到了:

db.event_copy.find({'channels.0' : {$exists: true}}).count()
Run Code Online (Sandbox Code Playgroud)