我想获取mongoose中模式的所有字段。现在我使用以下代码:
let Client = LisaClient.model('Client', ClientSchema)
let query = Client.findOne({ 'userclient': userclient })
query.select('clientname clientdocument client_id password userclient')
let result = yield query.exec()
但我想要所有的领域,无论它们是否为空。一如既往,提前谢谢
答案 0 :(得分:2)
我不确定您是否希望以类似SQL的方式使用所有字段,或者您是否希望以适当的MongoDB方式使用所有字段。
如果你想以适当的MongoDB方式使用它们,那么只需删除query.select
行。该行说只返回其中列出的字段。
如果你的意思是SQL,那么MongoDB并不是那样的。每个文档只包含插入时放入的字段。如果在插入文档时,您只给了它某些字段,那么该文档将只包含这些字段,即使其他集合中的其他文档具有不同的字段也是如此。
要确定集合中的所有可用字段,您必须找到所有文档,遍历所有文档并使用您找到的所有不同键构建对象。
如果您需要返回的每个文档始终包含您在选择中指定的字段,则只需在对象返回后对其进行转换。
const fields = ['clientname', 'clientdocument', 'client_id', 'password', 'userclient'];
let Client = LisaClient.model('Client', ClientSchema)
let query = Client.findOne({ 'userclient': userclient })
query.select(fields.join(' '))
let result = yield query.exec()
fields.forEach(field => result[field] = result[field]);
forEach
循环会将您想要的所有字段设置为结果中的值(如果它在那里),如果不是,则设置为undefined
。
答案 1 :(得分:0)
MongoDB是无模式的,没有表,每个集合可以有不同类型的项目。通常,这些对象以某种方式相关或具有共同的基本类型。
使用
回复不定记录 db.collectionName.findOne()
或db.collectionName.find().pretty()
获取MapReduce所需的所有关键名称
mapReduceKeys = db.runCommand({
"mapreduce": "collection_name",
"map": function() {
for (var key in this) {
emit(key, null);
}
},
"reduce": function(key, stuff) {
return null;
},
"out": "collection_name" + "_keys"
})
然后在结果集合上运行distinct,以便找到所有键
db[mapReduceKeys.result].distinct("_id") //["foo", "bar", "baz", "_id", ...]