我的“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文档,但是当我搜索“返回多个值”或“返回列表”时,我只获取文档列表,而不是这些文档中的值列表。
是否可以这样做,或者我是否需要编写单独的函数来单独获取每个值?
非常感谢您的协助。
答案 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" ]
name
<{1}}不同,请使用collection.distinct
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 );