列出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获取某个字段集合

mongodb查询数据库中某个字段中的值包含某个字符串的方法

python 操作mongoDB指令

如何从mongodb的表中读取各字段对应的类型

如何以编程方式强制 mongoose 查询并返回 mongodb 集合中的某个字段?

MongoDB:即使查询的所有字段都被索引,为啥我的扫描对象值很高?