mongodb 查询返回 value 而不是返回 key:value

2021-04-15 18:10:48 +08:00
 anthoy

问一下,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 的数组了

有相关使用或者资料的小伙伴麻烦提供下你的建议!!谢谢!

2362 次点击
所在节点    MongoDB
11 条回复
xkeyideal
2021-04-15 18:22:02 +08:00
学艺不精,mongodb 取哪个字段是{"age":1},那么有没有反问过,不取哪个字段应该怎么写呢?
答案:db.user.find({"name":"test"},{"age":1,"_id":0})
est
2021-04-15 18:25:26 +08:00
估计是不行的。还是得在代码里自己拼接。

你实在要 mongo 自己吐格式,可以用 aggregate
anthoy
2021-04-15 18:29:04 +08:00
@xkeyideal 嗯嗯,是的,但我想的是单纯返回最后的值,不包括 key
xkeyideal
2021-04-15 18:36:26 +08:00
@anthoy 说点啥好呢,不懂就问固然挺好,但基本常识还是要懂的吧
anthoy
2021-04-15 18:43:37 +08:00
@xkeyideal
> db.user.find({"name":"test"},{"age":1,"_id":0})

{ "age" : 20 }

但我想的是只返回 20,而不是{ "age" : 20 }

感觉我们之间有点不在同一条频道上呀,或者你想说的是别的?
DGideas
2021-04-15 21:55:05 +08:00
https://stackoverflow.com/questions/35434911/pymongo-find-only-return-answer

最方便的方法好像就是在 List Comprehension 里用 ["key"] 来取 value 了
DGideas
2021-04-15 21:56:23 +08:00
不过话说回来啊,这种数据库查询一般都会返回一个结果集,都得需要自己从中取数据的啊,一个结果集就是一条(包含一个或多个字段的)字典数据结构嘛
zengming00
2021-04-15 22:21:38 +08:00
db.user.find({"name":"test"},{"age":1,"_id":0}).age
maocat
2021-04-15 23:56:07 +08:00
db.user.distinct("age", {"name":"test"})
maocat
2021-04-16 00:16:18 +08:00
db.user.find({"name":"test"}).map( function (item){ return item.age} )
listenerri
2021-04-16 08:53:17 +08:00
@zengming00 #8 @maocat 请问像这种链调的风格,不怕 `find` 找不到结果返回空值吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX