列出mongodb中某个字段的所有值
Posted
技术标签:
【中文标题】列出mongodb中某个字段的所有值【英文标题】:List all values of a certain field in mongodb 【发布时间】:2014-06-09 23:42:15 【问题描述】:如何获得一个数组,其中包含集合中所有文档的某个字段的所有值?
db.collection:
"_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1
"_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2
"_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3
"_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "x" : 4
"_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5
"db.collection.ListAllValuesForfield(x)" 结果:[1,2,3,4,5]
另外,如果这个字段是一个数组呢?
"_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "y" : [1,2]
"_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "y" : [3,4]
"_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "y" : [5,6]
"_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "y" : [1,2]
"_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "y" : [3,4]
"db.collection.ListAllValuesInArrayField(y)" 结果:[1,2,3,4,5,6,1,2,3,4]
另外,我可以让这个数组独一无二吗? [1,2,3,4,5,6]
【问题讨论】:
Getting a distinct aggregation of an array field across indexes 的可能重复项 非常感谢!我应该把它拿下来吗? db.distinctAndCount 的 mongo shell 扩展非常好。 ***.com/a/30215651/1276299 【参考方案1】:db.collection.distinct('x')
应该为您提供该字段的唯一值数组。
【讨论】:
这正是我所需要的!值得注意的是,还有一个额外的参数(第二个)指定了一个文档查询db.collection.distinct('users.id', document: $in: [...]
嵌套文档的语法:db.collection.distinct('x.nestedField')
总是有用的“distinct and count”聚合/mongo shell 扩展:***.com/questions/14924495/…
我一直在寻找 'group by' 就像在 sql 中一样来获取这个列表,distinct() 工作得很好而且很简单!【参考方案2】:
这将返回一个文档数组,只包含它的 x 值...
db.collection.find(
,
x: 1, y: 0, _id:0
)
【讨论】:
感谢您的回答,正是我所需要的。 @lascort: 这个find
不是返回“一个数组”,而是一个光标...要使用这个方法获得一个不同的x
值数组, 你可以做:A = new Array(); db.collection.find().forEach( D => A.push(D.x) ); U = [... new Set(A)]
【参考方案3】:
注意:我的答案是原始答案的一个分支。
在此处的任何“竖起大拇指”之前,“竖起大拇指”接受的答案:)。
db.collection.distinct("NameOfTheField")
在单个集合或视图中查找指定字段的不同值,并在数组中返回结果。
参考:https://docs.mongodb.com/manual/reference/method/db.collection.distinct/
【讨论】:
这更适合作为对原始答案的评论。以上是关于列出mongodb中某个字段的所有值的主要内容,如果未能解决你的问题,请参考以下文章
mongodb查询数据库中某个字段中的值包含某个字符串的方法