Mongodb 如何在两个字段中分隔结果
我想知道一个特定的字段是否是数组。并在2个不同的字段中返回这两个值。我现在正在尝试一个Mongodb 如何在两个字段中分隔结果,mongodb,nosql,Mongodb,Nosql,我想知道一个特定的字段是否是数组。并在2个不同的字段中返回这两个值。我现在正在尝试一个$project 我想在一个项目中分离这两个字段,如下所示。然而,当涉及到分割结果时,我被卡住了。我是noSQL的新手,我没有设法在一个字段中有数组列表的“$value.FieldId”,而在另一个字段中没有数组的所有“$value.FieldId” 我想对字段“value.FieldId”执行$setunion。但是$setunion只接受数组类型作为条目。我的“value.FieldId”并不总是数组类型,
$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更易于理解您的回答。我确实找到了类似的解决方案,但与此同时,我的问题变得更大了。我想提出另一个问题,因为你的回答确实回应了这篇文章的原始问题。