gpt4 book ai didi

MongoDB 按字段 A 排序,如果字段 B != null 否则按字段 C 排序

转载 作者:行者123 更新时间:2023-12-04 14:41:04 29 4
gpt4 key购买 nike

我面临这样的挑战:

检索按字段 A 排序的文档 如果字段 B 存在/不为空 . 否则 按字段排序 C.

在 SQL 世界中,我会做两个查询并创建一个 UNION SELECT,但我不知道如何从 Mongo 开始。

map/reduce 是正确的方法吗?或者我应该专注于“计算领域”并使用这个。我对 MongoDB 比较陌生,我正在询问方向。

编辑:根据要求,这里有一些示例数据:

鉴于:

|     ID     | FieldA | FieldB | FieldC |
|------------|--------|--------|--------|
| Document 1 | 10 | X | 40 |
| Document 2 | 20 | <null> | 50 |
| Document 3 | 30 | Z | 60 |

预期结果(订单)包括以计算作为注释的列
|     ID     | FieldA | FieldB | FieldC | "A" if "B" !=<null> else "C" |
|------------|--------|--------|--------|------------------------------|
| Document 1 | 10 | X | 40 | 10 |
| Document 3 | 30 | Z | 60 | 30 |
| Document 2 | 20 | <null> | 50 | 50 |

谢谢,
舒贝

最佳答案

鉴于以下文件:

{ "a": 10, "b": "X",  "c" : 40 }
{ "a": 20, "b": null, "c" : 50 }
{ "a": 30, "b": "Z", "c" : 60 }

这样做的一种方法是这样的:
db.collection.aggregate({
$addFields: {
"sortField": { // create a new field called "sortField"
$cond: { // and assign a value that depends on
if: { $ne: [ "$b", null ] }, // whether "b" is not null
then: "$a", // in which case our field shall hold the value of "a"
else: "$c" // or else it shall hold the value of "c"
}
}
}
}, {
$sort: {
"sortField": 1 // sort by our computed field
}
}, {
$project: {
"sortField": 0 // remove "sort" field if needed
}
})

如果您的文档没有 b字段如下:
{ "a": 20, "c" : 50 }

那么你需要应用提到的技术之一 here .

所以你的 if $cond 内的部分可以例如看起来像这样:
if: { $ne: [ "$b", undefined ] }, // whether "b" is null or doesn't exist at all

关于MongoDB 按字段 A 排序,如果字段 B != null 否则按字段 C 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com