Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何在不定义模式的情况下使用Mongoose?_Mongodb_Node.js_Mongoose - Fatal编程技术网

Mongodb 如何在不定义模式的情况下使用Mongoose?

Mongodb 如何在不定义模式的情况下使用Mongoose?,mongodb,node.js,mongoose,Mongodb,Node.js,Mongoose,在以前版本的Mongoose(对于node.js)中,有一个选项可以在不定义模式的情况下使用它 var collection = mongoose.noSchema(db, "User"); 但在当前版本中,“noSchema”功能已被删除。我的模式可能会经常更改,并且确实不适合已定义的模式,因此是否有新的方法在mongoose中使用无模式模型?这已经不可能了 您可以将Mongoose与具有模式和节点驱动程序的集合一起使用,或者对那些无模式的集合使用另一个mongo模块 嘿,克里斯,看一看。我

在以前版本的Mongoose(对于node.js)中,有一个选项可以在不定义模式的情况下使用它

var collection = mongoose.noSchema(db, "User");

但在当前版本中,“noSchema”功能已被删除。我的模式可能会经常更改,并且确实不适合已定义的模式,因此是否有新的方法在mongoose中使用无模式模型?

这已经不可能了

您可以将Mongoose与具有模式和节点驱动程序的集合一起使用,或者对那些无模式的集合使用另一个mongo模块

嘿,克里斯,看一看。我对mongoose也有同样的问题,因为我的模式在开发过程中经常变化。Mongous允许我拥有Mongoose的简单性,同时能够松散地定义和更改我的“模式”。我选择简单地构建标准JavaScript对象并将它们存储在数据库中,就像这样

function User(user){
  this.name = user.name
, this.age = user.age
}

app.post('save/user', function(req,res,next){
  var u = new User(req.body)
  db('mydb.users').save(u)
  res.send(200)
  // that's it! You've saved a user
});
比Mongoose简单得多,尽管我相信你错过了一些很酷的中间件,比如“pre”。但我不需要这些。希望这有帮助

实际上,“混合”(
Schema.Types.Mixed
)模式在Mongoose中似乎正好如此

它接受一个无模式的自由形式的JS对象——因此,无论您对它抛出什么。看起来您必须在之后手动触发对该对象的保存,但这似乎是一个公平的权衡

混合的 作为一个“随遇而安”的SchemaType,它的灵活性取决于 它更难维护。可通过以下两种方式获得混合
Schema.Types.Mixed
或通过传递空对象文本。这个 以下是等效的:

var Any = new Schema({ any: {} });
var Any = new Schema({ any: Schema.Types.Mixed });
由于它是一种无模式类型,因此可以将该值更改为任何值 除此之外,猫鼬将失去自动检测和保存的功能 这些变化。“告诉”猫鼬混合类型的值 更改后,调用文档传递的
.markModified(path)
方法 您刚刚更改的混合类型的路径

person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved

    • 我想这就是你想要的

      选项:严格

      strict选项(默认情况下启用)确保添加到模型实例中的值不会保存到数据库中,这些值在模式中未指定

      注意:除非有充分理由,否则不要设置为false。

          var thingSchema = new Schema({..}, { strict: false });
          var Thing = mongoose.model('Thing', thingSchema);
          var thing = new Thing({ iAmNotInTheSchema: true });
          thing.save() // iAmNotInTheSchema is now saved to the db!!
      

      以下是详细说明:[


      你知道如何处理mongous中的偶然错误吗?这在文档中有点缺失。但我不认为这是问题的真正答案,@kwhitley对Mongoose有合适的答案。我必须同意。不过,我不确定,在问这个问题的时候Schema.types.mixed是可用的ed同意你的观点,但是,答案是在我接受这个答案一年后得出的。你救了我一天。我还发现这个不能与#markMotified(“”)PS一起使用:你必须做
      事情。set(key,value)
      因为
      thing.key=value
      不适用于此方法,也就是说,它不会持久保存到数据库中。如果使用此方法,则在检索文档时会遇到问题。执行查找后,doc.someProp doc.someProp将未定义,即使它实际上存在于对象上(一个console.log证实了这一点),这是因为mongoose定义了它自己的getter,只有当您在schema@a20:我理解你对MySQL的看法,并且我认为建议/根据注释:除非你有充分的理由,否则不要设置为false。在当前上下文中完全可以(仅关于
      NO-SQL
      )@Melbourne2991这在某种程度上是正确的,但是我发现了一个解决方法。您可以调用toJSON()方法,该方法将允许您使用常规的点表示法,如doc.someProp。很抱歉回答这样一个旧的答案。只是想添加此项,以防有人遇到相同的问题。这仍然是使用Mongo/Mongoose实现无模式工作的正确方法吗?但此结构将整个对象嵌套在
      any
      字段,因此它实际上有一个模式。对OP的更好回答是使用
      strict:false
      就像使用Mongodb平原一样,默认情况下这是一个较少的模式createConnection()instane的收集方法呢?
          const express = require('express')()
          const mongoose = require('mongoose')
          const bodyParser = require('body-parser')
          const Schema = mongoose.Schema
      
          express.post('/', async (req, res) => {
              // strict false will allow you to save document which is coming from the req.body
              const testCollectionSchema = new Schema({}, { strict: false })
              const TestCollection = mongoose.model('test_collection', testCollectionSchema)
              let body = req.body
              const testCollectionData = new TestCollection(body)
              await testCollectionData.save()
              return res.send({
                  "msg": "Data Saved Successfully"
              })
          })
      
      
        [1]: https://www.meanstack.site/2020/01/save-data-to-mongodb-without-defining.html