gpt4 book ai didi

MongoDB elemMatch 和日期字段的结果不正确

转载 作者:行者123 更新时间:2023-12-02 01:07:08 27 4
gpt4 key购买 nike

我有以下文件

{
"_id" : ObjectId("52da43cd6f0a61e8a5059aaf"),
"assignments" : [
{
"project" : "abc",
"start" : ISODate("2012-12-31T18:30:00Z"),
"end" : ISODate("2013-06-29T18:30:00Z")
},
{
"project" : "efg",
"start" : ISODate("2013-06-30T18:30:00Z"),
"end" : ISODate("2014-03-30T18:30:00Z")
}
],
"eid" : "123",
"name" : "n1",
"uid" : "u1"
}

我正在尝试使用以下查询查找在特定日期之后开始的所有作业。但返回的数据很困惑,看起来不正确。请帮助我理解我做错了什么。

> db.test.find( {uid:'u1'},{ assignments: { $elemMatch: {end: {$gte: new Date(2011,5,1) } } }} ).pretty();
{
"_id" : ObjectId("52da43cd6f0a61e8a5059aaf"),
"assignments" : [
{
"project" : "abc",
"start" : ISODate("2012-12-31T18:30:00Z"),
"end" : ISODate("2013-06-29T18:30:00Z")
}
]
}

它应该返回这两个项目吗?

最佳答案

$elemMatch operator将结果限制为每个文档的第一个匹配数组元素。

如果你想返回所有匹配的数组元素,你可以使用 Aggregation Framework :

db.courses.aggregate(
// Find matching documents (would benefit from an index on `{uid: 1}`)
{ $match : {
uid:'u1'
}},

// Unpack the assignments array
{ $unwind : "$assignments" },

// Find the assignments ending after given date
{ $match : {
"assignments.end": { $gte: ISODate("2011-05-01") }
}}
)

关于MongoDB elemMatch 和日期字段的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202613/

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