gpt4 book ai didi

mongodb - 检查 MongoDB 数组中的所有元素是否匹配给定的查询

转载 作者:可可西里 更新时间:2023-11-01 10:32:39 26 4
gpt4 key购买 nike

这是我的文档的样子:

nookstore = {
"name": "Nook store",
"categories": ["bookstore"],
"working_hours": [
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 8*60*60, "closes": 21*60*60 },
{"opens": 9*60*60, "closes": 20*60*60 },
]
}

...

kindlestore = {
"name": "Kindle store",
"categories": ["bookstore"],
"working_hours": [
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
{"opens": 0, "closes": 24*60*60 },
],
}

我正在寻找 24 小时营业的商店,即 working_hours每个元素0 营业并在 0 关门的商店24*60*60(午夜后的秒数)。

我尝试使用 $all$elemMatch,但它们适用于我需要匹配的情况,如果数组的至少一个元素符合给定条件(我不需要)。

最佳答案

虽然我认为如果您修改架构以将特殊状态包含为另一个字段 (open24hours) 会最好,但您可以使用聚合框架来查找匹配项。

db.stores.aggregate({$unwind : '$working_hours' }, 
{ $group : {
_id : {
name: '$name',
opens: '$working_hours.opens',
closes: '$working_hours.closes' },
total: { $sum : 1 }
}
},
{ $match : { total : 7 } })

这会展开营业时间,然后根据名称、营业时间和营业时间进行分组,从而形成唯一的组合,然后计算每个组合的匹配次数。如果总数为 7,则它在所有 7 天都匹配。您可以进行进一步的匹配,以仅在 0 处找到 opens 并在 86400 处找到closes

结果:

{
"result" : [
{
"_id" : {
"name" : "Kindle store",
"opens" : 0,
"closes" : 86400
},
"total" : 7
}
],
"ok" : 1
}

关于mongodb - 检查 MongoDB 数组中的所有元素是否匹配给定的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574849/

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