gpt4 book ai didi

mongodb - 查找字段超过 3 天的位置

转载 作者:可可西里 更新时间:2023-11-01 09:36:39 25 4
gpt4 key购买 nike

我有一个 mongodb 数据库,其数据结构如下:

{ 
"_id" : "123456":,
"Dates" : ["2014-02-05 09:00:15 PM", "2014-02-06 09:00:15 PM", "2014-02-07 09:00:15 PM"],
}

还有其他东西,但我想做的是提取 Dates{$slice: -1} 超过 3 天的数据。我有这样的查询,但它不起作用:

db.posts.find({}, {RecoveryPoints:{$slice: -1} $lt: ISODate("2014-02-09 00:00:00 AM")})

我开始认为这是不可能的,但我想我会先来这里。我的猜测是我必须在我的代码中执行此逻辑。

编辑:我还想提一下,我的目标是返回整个记录,而不仅仅是计算它的日期

最佳答案

您的查询包含投影端而非查询端的所有元素。既然你不想改变文档的外观,那么你就没有必要投影。

这实际上是一个简单的比较,就好像你一直在看第一个元素然后你可以使用点“。”符号形式来寻找它:

> db.dates.find({ "Dates.0": {$lt: ISODate("2014-02-09 00:00:00 AM") } }).pretty()
{
"_id" : "123456",
"Dates" : [
ISODate("2014-02-05T09:00:15Z"),
ISODate("2014-02-06T09:00:15Z"),
ISODate("2014-02-07T09:00:15Z")
]
}
> db.dates.find({ "Dates.0": {$lt: ISODate("2014-02-05 00:00:00 AM") } }).pretty()
>

所以点“.”在数组的情况下,符号在索引值处工作,要获取其他元素,只需更改位置:

> db.dates.find({ "Dates.1": {$lt: ISODate("2014-02-07 00:00:00 AM") } }).pretty()
{
"_id" : "123456",
"Dates" : [
ISODate("2014-02-05T09:00:15Z"),
ISODate("2014-02-06T09:00:15Z"),
ISODate("2014-02-07T09:00:15Z")
]
}
> db.dates.find({ "Dates.3": {$lt: ISODate("2014-02-07 00:00:00 AM") } }).pretty()
>
> db.dates.find({ "Dates.2": {$lt: ISODate("2014-02-08 00:00:00 AM") } }).pretty()
{
"_id" : "123456",
"Dates" : [
ISODate("2014-02-05T09:00:15Z"),
ISODate("2014-02-06T09:00:15Z"),
ISODate("2014-02-07T09:00:15Z")
]
}

请注意,这仅在您根据更改对数组进行排序时才有意义,否则可以确保第一个(或您正在查询的位置)元素将成为您要比较的元素。如果您需要以其他方式针对所有元素进行测试,请改用查询中的 $elemMatch 运算符。

您无法通过此查询获得所需结果的唯一原因是您的日期是字符串。如果是这样,请更改它们,并更改导致它们以这种方式保存的任何代码。

关于mongodb - 查找字段超过 3 天的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691622/

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