gpt4 book ai didi

json - Spring Boot 和 MongoDB,查询键的嵌套映射

转载 作者:行者123 更新时间:2023-12-02 00:38:29 25 4
gpt4 key购买 nike

我正在尝试查询 MongoDB 以查找在文档的嵌套映射中具有特定键的所有文档

{
"_id" : ObjectId("5a5cd9711736c32c45f11adf"),
"name" : "Test A",
"userSubscription" : {
"map" : {
"1234" : true,
"999" : true,
}
}
}

我正在查询如下:

db.getCollection('myColl').find( { "userSubscription.map" : {"1234":true }})

它正在工作,但是,它只返回包含单个值“1234”的文档,所以如果“userSubscription.map”包含“1234”“5555 "查询未显示任何结果。

我正在使用 Robo3T 来测试查询,并使用 SpringBoot 注释来查询它,答案可以在 Spring Boot 注解查询中吗?

Spring Boot 查询示例:

@Query("{QUERY : ?0}")
List<Person> findByUserSubscription(String key);

** "?0"是使用第一种方法参数

谢谢!!!

更新:

现在文档看起来像这样:

{
"_id" : ObjectId("5a5cd9711736c32c45f11adf"),
"name" : "Test A",
"userSubscription" : {
"1234" : true,
"3333" : true
}
}

Robo 3T 查询:db.getCollection('Person').find({ "userSubscription.1234": {$exists : true} })

完美运行!

但是,Spring boot 中的查询看起来像:

@Query("{userSubscription.?0 : {$exists: true} }")

它没有显示任何结果...

有什么问题???

最佳答案

将 map 建模为 array of embedded documents喜欢

{
"map" : [
{k: "1234", v: true},
{k: "999", v: true}
]
}

你可以通过按键找到

db.myColl.find({"userSubscription.map":{$elemMatch: { k: "1234", v: true } } })

@Query("{'userSubscription.map':{$elemMatch: { k: ?0, v: true } } }")
List<Person> findByUserSubscription(String key);

`

关于json - Spring Boot 和 MongoDB,查询键的嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268181/

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