gpt4 book ai didi

Mongodb -Moogose 查询数组字段过滤器

转载 作者:可可西里 更新时间:2023-11-01 10:43:13 25 4
gpt4 key购买 nike

我想在 agg : 6 且 'value' 大于 : 1000 且 agg : 5 且 'value' 大于 : 2000 时进行过滤架构:发布

Query:db.postings.find(
{ agg: {
$elemMatch: {
$and:[
{agg:'5', value: { $gte: '2000'} },
{agg:'6', value: { $gte: '1000'} }
]
}
}}
);

结果:[] 空

集合':

{   "_id":1,
"agg" : [
{ "value" : "2014", "agg" : "5"},
{"value" : "2500","agg" : "6"}
],
}
{
_id:2,
"agg" : [
{ "value" : "2015", "agg" : "5"},
{ "value" : "1000","agg" : "6" }
],
}

how i write query correctly?

最佳答案

看起来您想要 agg 数组满足以下条件的文档:

contains a subdocument where agg = "6" and value >= "2000"
AND
contains a subdocument where agg = "5" and value >= "1000"

您的查询是针对 agg 子数组满足以下条件的文档:

contains a subdocument where
agg = "6" and value >= "2000"
AND
agg = "5" and value >= "1000"

正确查询的 MongoDB 公式是

{ 
"$and" : [
{ "agg" : { "$elemMatch" : { "agg" : "5", "value" : { "$gte" : "2000" } } } },
{ "agg" : { "$elemMatch" : { "agg" : "6", "value" : { "$gte" : "1000" } } } }
]
}

等同于$all,

{
"agg" : {
"$all" : [
{ "$elemMatch" : { "agg" : "5", "value" : { "$gte" : "2000" } } },
{ "$elemMatch" : { "agg" : "6", "value" : { "$gte" : "1000" } } }
]
}
}

这个查询与两个文档匹配,我想符合预期。但是,我仍然怀疑你是否在做你真正想要做的事情 - 你确定你想要 agg.aggagg.value 的值是字符串而不是数字?例如,以下文档匹配查询:

{
"_id" : 3,
"agg" : [
{ "agg" : "5", "value" : "2015" },
{ "agg" : "6", "value" : "potato" }
]
}

本文档不:

{
"_id" : 4,
"agg" : [
{ "agg" : "5", "value" : "2015" },
{ "agg" : "6", "value" : 2000 }
]
}

关于Mongodb -Moogose 查询数组字段过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29396476/

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