【问题标题】:Select all the fields in a mongoose schema选择猫鼬模式中的所有字段
【发布时间】:2017-03-09 16:44:39
【问题描述】:

我想在 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()

但我想要所有字段,无论它们是否为空。一如既往,提前谢谢你

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    我不确定您是否希望所有字段都采用类似 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(如果不存在)。

    【讨论】:

    • 非常感谢!!!你是高手,不仅回答了我的问题,还给了我一个额外的工具,谢谢。你是对的,我正在将我的知识从 SQL 迁移到 noSQL。我的心理结构仍然是相关的
    • 我就是这么想的。当我第一次切换时,我也有同样的心理障碍。很高兴它有帮助 =)
    【解决方案2】:

    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", ...]
    

    【讨论】:

      猜你喜欢
      • 2013-10-07
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2015-04-11
      相关资源
      最近更新 更多