mongodb - 在 Mongo 中是模式还是无模式

标签 mongodb mongoose mongoose-schema schemaless

我喜欢 Mongodb 的无模式架构。这使得它非常灵活。然而,Mongoose ODM 提供了某些要求,例如模型关系和数据验证。

我阅读了一些 SO 线程,发现 Mongoose 在处理真正复杂的文档结构方面的性能与 native MongoDB 驱动程序相比并不是那么好,在我的例子中是 NodeJS 驱动程序。

我不想失去无架构的灵 active ,这让我可以随时更改我的结构,这真的很棒。但是我想用模型关系。

哪种做法更好:无模式或特别是在 Mongo 中使用模式?

最佳答案

这里有一些方法可以避免 mongoose 提供的一些开销,以及一种在脚本中为 NodeJs 驱动程序访问 native mongoDb 命令的方法。

您可以访问 mongodb.Db instance .

因此您可以访问 db constructor用于 Nodejs 驱动程序。

所以我可以在我的节点 js/mongoose 文件中做这样的事情

mongoose.connection.db.dropCollection("collectionName", function(err, doc){
    if(err) console.log(err);
    console.log(doc);
})

此外,如果您不希望 mongoose 为从查询返回的对象提供额外属性,您可以使用 .lean()。如果你使用 lean,你会得到普通的 javascript 对象而不是 mongoose 文档。精益要快得多。

示例::

Model.find().lean().exec(function (err, docs) {
  docs[0] instanceof mongoose.Document // false
});

关于mongodb - 在 Mongo 中是模式还是无模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077208/

相关文章:

java - 在 mongodb 中检索下 N 条记录

node.js - 在 Mongoose 模式验证中执行查询

javascript - 如何验证 mongoose 和 node.js 上的 db.collections.insertOne 输入

node.js - 如何使用 find() 函数从 MongoDB 调用数据?

mongodb - 从 AWS Glue 连接到 DocumentDB

node.js - 更新并指定 addToSet 的键

Node.js Mongoosejs 填充填充字段

arrays - 如果数组包含 id mongoose 则获取数组

python - 在Python中使用正则表达式删除名称末尾带有 "expn"的MongoDB数据库

mongoose - UpdateOne 返回一个 mongoose 对象而不是文档