gpt4 book ai didi

mongodb - Mongo - 将 null 或 undefined 字段视为特定值

转载 作者:可可西里 更新时间:2023-11-01 10:03:27 24 4
gpt4 key购买 nike

我有以下情况:

考虑一个包含以下文档的集合:

 [
{
'_id': ObjectId('somehting'),
'date': null
},
{
'_id': ObjectId('somehting'),
},
{
'_id': ObjectId('somehting'),
'date': '2015-01-01 12:12:12'
},
many others
]

现在我有以下查询查找日期介于值之间的文档 db.getCollection('validation_archive').find({'date': {$lte: '[date_here]', {$gte: '[date_here ]'}}});

一切正常,除了为空或不存在的字段。

我是否可以告诉 mongo 将 null 视为“0000-00-00 00:00:00”?

编辑:我需要这样做,所以如果 $gt 中发送的日期是 0000-00-00 00:00:00,查询将在结果中返回文档。

最佳答案

在一般查询中则没有。您始终可以将它们从结果中排除,如:

db.getCollection('validation_archive').find({
"date": { "$lte": date_to, "$gte" date_from, "$ne": null }
})

或者您可以使用 .aggregate() 建议的“零”或“纪元”日期“包含”:

db.getCollection('validation_archive').aggregate([
{ "$redact": {
"$cond": {
"if": {
"$and": [
{ "$gte": [ date_from, { "$ifNull": [ "$date", new Date(0) ] } ] },
{ "$lte": [ date_to, { "$ifNull": [ "$date", new Date(0) ] } ] }
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])

但在你所问的上下文中,我们将不得不问“有什么意义”。

或者即使你必须:

db.getCollection('validation_archive').aggregate([
{ "$project": {
"date": { "$ifNull": [ "$date", new Date(0) ] }
}},
{ "$match": {
"$or": [
{ "date": { "$lte": date_to, "$gte" date_from } },
{ "date": { "$eq": Date(0) } }
]
}}
])

这完全包含在结果中。

但话又说回来,为什么不这样做:

db.getCollection('validation_archive').find({
"$or": [
{ "date": { "$lte": date_to, "$gte" date_from },
{ "date": null },
{ "date": { "$exists": false } }
]
})

效率更高。

因此可以将不存在的日期“转换”为日期,但简单地使用基本查询操作更有意义。

关于mongodb - Mongo - 将 null 或 undefined 字段视为特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32843675/

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