Mongodb 如何在两个字段中分隔结果

Mongodb 如何在两个字段中分隔结果,mongodb,nosql,Mongodb,Nosql,我想知道一个特定的字段是否是数组。并在2个不同的字段中返回这两个值。我现在正在尝试一个$project 我想在一个项目中分离这两个字段,如下所示。然而,当涉及到分割结果时,我被卡住了。我是noSQL的新手,我没有设法在一个字段中有数组列表的“$value.FieldId”,而在另一个字段中没有数组的所有“$value.FieldId” 我想对字段“value.FieldId”执行$setunion。但是$setunion只接受数组类型作为条目。我的“value.FieldId”并不总是数组类型,

我想知道一个特定的字段是否是数组。并在2个不同的字段中返回这两个值。我现在正在尝试一个
$project

我想在一个项目中分离这两个字段,如下所示。然而,当涉及到分割结果时,我被卡住了。我是noSQL的新手,我没有设法在一个字段中有数组列表的
“$value.FieldId”
,而在另一个字段中没有数组的所有
“$value.FieldId”

我想对字段
“value.FieldId”
执行
$setunion
。但是
$setunion
只接受数组类型作为条目。我的
“value.FieldId”
并不总是数组类型,它有时是一个简单的字符串

因此,我需要将
“value.FieldId”
的两个组成部分拆分为两个不同的字段。在
isArray
中,所有
“value.FieldId”
为数组类型,而在
isNotArray中,所有
“value.FieldId”
为非数组类型

   db.getCollection('collectionA').aggregate([
   {
      $project: {
         item: 1,
         matricule : "$value.id",
         isArray: {$isArray:"$value.FieldId"},
         isNotArray: {$isArray:"$value.FieldId"},
      }
   }
] )

如果你有一个线索或任何意见,这种情况下,这将是真正的帮助

是,
$setUnion
仅当给定字段在集合的所有文档中都是数组类型时才起作用,因此请尝试以下方法使其起作用:

var inputArr = [7,8]
    db.CollectionA.aggregate(
       [
        {$project: {arr: {
                     $cond: { if: {  $isArray: "$arr"   }, then: { $setUnion: [ inputArr, "$arr" ] }, else: '$arr' }
                   }
               }
           }
       ]
    )
收藏:

/* 1 */
{
    "_id" : ObjectId("5df8b596400289966e77e268"),
    "arr" : [ 
        1, 
        2, 
        3
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df8b5a0400289966e77e32e"),
    "arr" : [ 
        4, 
        5, 
        6
    ]
}

/* 3 */
{
    "_id" : ObjectId("5df8b5a9400289966e77e3ee"),
    "arr" : 1
}
/* 1 */
{
    "_id" : ObjectId("5df8b596400289966e77e268"),
    "arr" : [ 
        1, 
        2, 
        3, 
        7.0, 
        8.0
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df8b5a0400289966e77e32e"),
    "arr" : [ 
        4, 
        5, 
        6, 
        7.0, 
        8.0
    ]
}

/* 3 */
{
    "_id" : ObjectId("5df8b5a9400289966e77e3ee"),
    "arr" : 1
}
结果:

/* 1 */
{
    "_id" : ObjectId("5df8b596400289966e77e268"),
    "arr" : [ 
        1, 
        2, 
        3
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df8b5a0400289966e77e32e"),
    "arr" : [ 
        4, 
        5, 
        6
    ]
}

/* 3 */
{
    "_id" : ObjectId("5df8b5a9400289966e77e3ee"),
    "arr" : 1
}
/* 1 */
{
    "_id" : ObjectId("5df8b596400289966e77e268"),
    "arr" : [ 
        1, 
        2, 
        3, 
        7.0, 
        8.0
    ]
}

/* 2 */
{
    "_id" : ObjectId("5df8b5a0400289966e77e32e"),
    "arr" : [ 
        4, 
        5, 
        6, 
        7.0, 
        8.0
    ]
}

/* 3 */
{
    "_id" : ObjectId("5df8b5a9400289966e77e3ee"),
    "arr" : 1
}

您可以尝试使用本例中的:。@Bruno:当分割一个字段中的结果
&以及
数组列表
+
,而另一个字段中没有数组
--您指的是一个文档和另一个文档吗?如果您想要字段
isArray
中的值,那么您可以编辑您的问题以提供样本数据和所需的o/p,这将是理想的选择?@srinivasy我编辑了该问题,因此它比X更易于理解您的回答。我确实找到了类似的解决方案,但与此同时,我的问题变得更大了。我想提出另一个问题,因为你的回答确实回应了这篇文章的原始问题。