是否可以从查询中返回特定值列表?

时间:2015-07-16 15:07:06

标签: mongodb mongodb-query database

我的“components”集合中有一个文档列表,每个文档都有“name”属性。例如:

{
     "_id" : "ce83jfieojf8"
     "name": "George"
}

我想编写一个查询,返回组件中所有文档中所有名称值的完整列表。

现在,我可以使用db.components.find({'_id':0, 'name':1}),这将返回如下内容:

{"name" : "George"}
{"name" : "John"}
{"name" : "Paul"}

我可以使用索引和.name属性获取这些文档中任何一个文档的名称。如果我放入

db.components.find({'_id':0, 'name':1})[0].name 

我明白了:

George

但是,我想要的是一个将返回的查询:

George 
John 
Paul

我查看了Mongo文档,但是当我搜索“返回多个值”或“返回列表”时,我只获取文档列表,而不是这些文档中的值列表。

是否可以这样做,或者我是否需要编写单独的函数来单独获取每个值?

非常感谢您的协助。

3 个答案:

答案 0 :(得分:2)

好吧,假设你的收藏中有以下文件:

{ "_id" : ObjectId("55a7cfeeeb68594275546c76"), "name" : "George" }
{ "_id" : ObjectId("55a7cfeeeb68594275546c77"), "name" : "John" }
{ "_id" : ObjectId("55a7cfeeeb68594275546c78"), "name" : "Paul" }
{ "_id" : ObjectId("55a7cfeeeb68594275546c79"), "name" : "Jack" }
{ "_id" : ObjectId("55a7cfeeeb68594275546c7a"), "name" : "Paul" }
  • 您可以使用cursor.map收集并返回所有名称作为数组
db.collection.find().map(function(u){ return u.name })
[ "George", "John", "Paul", "Jack", "Paul" ]
db.collection.distinct('name')
[ "George", "John", "Paul", "Jack" ]

答案 1 :(得分:0)

如果您想从所有文档中返回所有names的列表,可以使用$aggregation之类的内容:

db.collection.aggregate({$group:{_id:null,"name":{$push:"$name"}}},{$project:{_id:0,name:1}})

答案 2 :(得分:0)

使用distinct之类的:

// Schema
var notebookSchema = new mongoose.Schema({
  _id: {
    type: 'string'
  },
  title: {
    type: 'string',
    required: true
  }
});

var customIdPlugin = function(schema, options) {
  schema.pre('save', function(next) {
    var oid = ""+mongoose.Types.ObjectId();
    this._id = new Buffer(oid, 'hex').toString('base64').replace('+', '-').replace('/', '_');;
    next();
  });
};

notebookSchema.plugin(customIdPlugin );