MongoDB $match和$isArray

6

对于这么多的数据,我只想匹配那些是数组的字段。但我想将$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"
    ]
}

这是我尝试的内容,但它返回一个语法错误,在$match一行上。说实话,我尝试了所有我能想到或在Mongo文档上看到的语法:
> db.getCollection('Test').aggregate([ {
>     $project:{
>     "item":"$fieldIDA" 
>     }}
>     {$match : { $isArray: {"$item"} }:true}, ])

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


您可以使用$match阶段来测试聚合中的数组字段,例如:{ $match: { $expr: { $isArray: "$arr" } },其中arr是一个数组字段。 - prasad_
@prasad_不起作用。 - Bruno SENELLART
请在jsoneditor online上分享输出数据。 - Mahesh Bhatnagar
1个回答

6
你可以尝试其中之一:
db.Test.find({ "fieldIDA" : { $type: "array" } })

或者是这样的:
db.Test.aggregate([{$project : {fieldIDA: 1, _id:0}},{$match : { "fieldIDA" : { $type: "array" } }}])

Ref : $type


1
谢了,我找到了一个类似的方法来做这件事情,在项目中使用了 $type,然后在 $project 外面使用了 $match。 - Bruno SENELLART

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接