我正在使用一个JSON文件,其中包含这样结构的对象:
[
{
"_id": { "$oid": "65143f76653355483f68981d" },
"date": "2023-09-27",
"certificates": [
{ "cnv2234": { "expiryDate": "2024-08-17" } },
{ "crs14359": { "expiryDate": "2023-09-14" } },
{ "crs14359": { "expiryDate": "2030-03-06" } },
{ "crs14359": { "expiryDate": "2040-02-25" } }
]
}
]
我尝试了各种查询,例如:
query = { "certificates.expiryDate": { "$lte": "2023-09-14" } }
query = { "certificates": { "$elemMatch": { "expiryDate": { "$lte": "2023-09-14" } } } }
query = { "certificates": { "$elemMatch": { "expiryDate": { "$lte": "2023-09-14" } } } }
这些查询均未返回任何数据。虽然我可以通过每个主机和日期成功地检索所有数据,但这对于较大的数据集并不实用。有人能指导我如何纠正这个查询,以便在对象没有字段名的情况下在对象数组中基于“expiryDate”进行有效过滤吗?
1条答案
按热度按时间i7uq4tfw1#
对于您当前的模式,有几件事情需要考虑,建议您重构它。
1.日期存储在字符串中。日期应存储为适当的日期对象,以便查询。
1.当前动态值用作字段名称。像this那样重构模式,以避免查询时不必要的复杂性。
然而,对于您当前的情况,您可以使用
$objectToArray
进行查询。Mongo Playground