问一下,mongodb 支持只返回 value,而不是返回 key:value 这样子格式的吗?
比如下面的表
> db.user.find()
{ "_id" : ObjectId("6077fac5fe214ec7b60ea68e"), "name" : "chenyurong", "age" : 25, "addr" : "ShenZhen" }
{ "_id" : ObjectId("60780dbdfe214ec7b60ea68f"), "name" : "chenyurong", "age" : 26, "addr" : "ShenZhen" }
{ "_id" : ObjectId("60780dc0fe214ec7b60ea690"), "name" : "chenyurong", "age" : 27, "addr" : "ShenZhen" }
{ "_id" : ObjectId("60780dc3fe214ec7b60ea691"), "name" : "chenyurong", "age" : 28, "addr" : "ShenZhen" }
{ "_id" : ObjectId("60780e39fe214ec7b60ea692"), "name" : "test", "age" : 20, "addr" : "ShenZhen" }
> db.user.find({"name":"test"},{"age":1})
{ "_id" : ObjectId("60780e39fe214ec7b60ea692"), "age" : 20 }
但我希望返回的直接是20
,这个 mongodb 支持的嘛?
目前我查阅的资料都是不支持的,有没有人有其他的操作
> db.user.find({},{"age":1})
{ "_id" : ObjectId("6077fac5fe214ec7b60ea68e"), "age" : 25 }
{ "_id" : ObjectId("60780dbdfe214ec7b60ea68f"), "age" : 26 }
{ "_id" : ObjectId("60780dc0fe214ec7b60ea690"), "age" : 27 }
{ "_id" : ObjectId("60780dc3fe214ec7b60ea691"), "age" : 28 }
{ "_id" : ObjectId("60780e39fe214ec7b60ea692"), "age" : 20 }
我希望可以返回的是关于 age 的列表,比如{ age:[25,26,...] } 或者直接是[25,26,...]
这个可以实现嘛?还是只能从上面的结果进行处理生成数组
目前我使用 spring-boot-starter-data-mongodb 操作 mongodb 的,主要使用 MongoTemplate
我想了解下 MongoTemplate 有没有对其封装有实现上面两个需求的,目前我看文档也是没有找到
没有的话是不是只能查询出 List<User>,再编历读取构建 age 的数组了
有相关使用或者资料的小伙伴麻烦提供下你的建议!!谢谢!
1
xkeyideal 2021-04-15 18:22:02 +08:00
学艺不精,mongodb 取哪个字段是{"age":1},那么有没有反问过,不取哪个字段应该怎么写呢?
答案:db.user.find({"name":"test"},{"age":1,"_id":0}) |
2
est 2021-04-15 18:25:26 +08:00
估计是不行的。还是得在代码里自己拼接。
你实在要 mongo 自己吐格式,可以用 aggregate |
5
anthoy OP @xkeyideal
> db.user.find({"name":"test"},{"age":1,"_id":0}) { "age" : 20 } 但我想的是只返回 20,而不是{ "age" : 20 } 感觉我们之间有点不在同一条频道上呀,或者你想说的是别的? |
6
DGideas 2021-04-15 21:55:05 +08:00
https://stackoverflow.com/questions/35434911/pymongo-find-only-return-answer
最方便的方法好像就是在 List Comprehension 里用 ["key"] 来取 value 了 |
7
DGideas 2021-04-15 21:56:23 +08:00
不过话说回来啊,这种数据库查询一般都会返回一个结果集,都得需要自己从中取数据的啊,一个结果集就是一条(包含一个或多个字段的)字典数据结构嘛
|
8
zengming00 2021-04-15 22:21:38 +08:00
db.user.find({"name":"test"},{"age":1,"_id":0}).age
|
9
maocat 2021-04-15 23:56:07 +08:00
db.user.distinct("age", {"name":"test"})
|
10
maocat 2021-04-16 00:16:18 +08:00 1
db.user.find({"name":"test"}).map( function (item){ return item.age} )
|
11
listenerri 2021-04-16 08:53:17 +08:00
@zengming00 #8 @maocat 请问像这种链调的风格,不怕 `find` 找不到结果返回空值吗?
|