Mongodb $match 和 $isArray

Bru*_*ART 6 mongodb nosql

对于如此充足的数据,我只想匹配数组字段。但我想退出$match这个项目。

这是数据样本:

/* 1 */
{
    "_id" : ObjectId("5df8b596400289966e77e268"),
    "fieldIDA" : "1496461ahu-45196tfvj",
    "fieldIDB" : "4446rarr21-vau15ar6a"
}

/* 2 */
{
    "_id" : ObjectId("5df9ee6014585733585abde6"),
    "fieldIDA" : "78a24da5ea-a0a84tf5t",
    "fieldIDB" : [ 
        "17a7a61a78-4649atfvj", 
        "149648a6a1-777777fvj", 
        "4846131prv-45aeda8vj"
    ]
}

/* 3 */
{
    "_id" : ObjectId("5df9ee6014585733585abde9"),
    "fieldIDA" : null,
    "fieldIDB" : "7a25rayfg7-t69468a8v"
}

/* 4 */
{
    "_id" : ObjectId("5df9ffe714585733585ac5b8"),
    "fieldIDA" : [ 
        "4946465434-vuhfyfuog", 
        "198fdyufu5-4654d43dc", 
        "aeadad596a-aead82a2a"
    ],
    "fieldIDB" : [ 
        "17a7a61a78-4649atfvj", 
        "149648a6a1-777777fvj", 
        "4846131prv-45aeda8vj"
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试的,但它返回一个语法错误,老实说,$match我尝试了我能想到的或在 mongo 文档上查看的所有语法:

> db.getCollection('Test').aggregate([ {
>     $project:{
>     "item":"$fieldIDA" 
>     }}
>     {$match : { $isArray: {"$item"} }:true}, ])
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的请求,但我不知道如何使其发挥作用。

sri*_*asy 6

您可以尝试以下其中一项:

db.Test.find({ "fieldIDA" : { $type: "array" } })
Run Code Online (Sandbox Code Playgroud)

或这个 :

db.Test.aggregate([{$project : {fieldIDA: 1, _id:0}},{$match : { "fieldIDA" : { $type: "array" } }}])
Run Code Online (Sandbox Code Playgroud)

参考: $类型