gpt4 book ai didi

mongodb - 如何在 mongodb 中过滤命令游标

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

我是 NoSQL 数据库的新手。我在解决一个简单问题时遇到困难

我有一个数据库,其中的日期是字符串。我想过滤我的集合,以便我可以获得日期大于特定日期的元素。为了解决这个问题,我将我的字符串日期转换为日期对象,并使用聚合 $addFields 方法将其添加为一个字段。

collection.aggregate([{
"$addFields": {
"CA": {
"$convert": {
"input": {
"$substr": ["$headers.Date", 5, 20]
},
"to": "date"
}
}
}}])

我首先尝试了上面的代码并且它有效。有一个带有日期对象的“CA”字段,但我想使用查找和过滤器来过滤它们,但由于它是一个命令游标,所以方法不可用。这就是为什么我尝试了下面的代码但效果不佳的原因。它基本上是我在上面添加了 $filter

的代码的修改版本
collection.aggregate([{
"$filter": {
"input": {
"$addFields": {
"CA": {
"$convert": {
"input": {
"$substr": ["$headers.Date", 5, 20]
},
#"$headers.Date"
"to": "date"
}
}
}
},
'as': 'db',
"cond": {
"$lt": ["$db.CA", datetime.now()]
}
}}])

编辑:根据要求我在下面添加了示例元素

{'_id': ObjectId('e27'),
'body': "Body",
'subFolder': 'notes_inbox',
'mailbox': 'bass-e',
'filename': '450.',
'headers': {'X-cc': '',
'From': 'XXX@XX.com',
'Subject': 'Re: information',
'X-Folder': '\\Notes inbox',
'Content-Transfer-Encoding': '7bit',
'X-bcc': '',
'To': 'x.bass@y.com',
'X-Origin': 'Bass-E',
'X-FileName': 'ebass.nsf',
'X-From': 'Miel Sim',
'Date': 'Tue, 14 Nov 2000 08:22:00 -0800 (PST)',
'X-To': 'Eric Bass',
'Message-ID': '<6884142.1075854677416.JavaMail.evans@thyme>',
'Content-Type': 'text/plain; charset=us-ascii',
'Mime-Version': '1.0'}}

最佳答案

您可以使用 $filter当您需要过滤嵌套数组时,在您的情况下,因为您只有一个值,所以您可以简单地使用 $match , 尝试:

db.collection.aggregate([
{
"$addFields": {
"CA": {
"$convert": {
"input": {
"$substr": ["$headers.Date", 5, 20]
},
"to": "date"
}
}
}
},
{
$match: {
CA: { $lt: ISODate() } // or datetime.now()
}
}
])

如果您不想添加新字段,您可以使用 $expr运算符(operator):

db.collection.aggregate([
{
$match: {
$expr: {
$lt: [ { $convert: { input: { "$substr": ["$headers.Date", 5, 20] }, to: "date" } }, ISODate() ]
}
}
}
])

关于mongodb - 如何在 mongodb 中过滤命令游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579597/

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