json - 无法通过声明的 mongoosejs 模式保存 JSON

标签 json node.js mongodb mongoose

我是 Nodejs 和 mongoose 的新手。 Mongoose 模式声明有问题。

我声明了一个架构如下:

var srouteDetails = new Schema({route_id:String, route_name:String});
var srouteTypes = new Schema({route_type:String, mode_name:String, route:[srouteDetails]});
var smode = new Schema({mode:[srouteTypes]});

我试图保存的 JSON:

{"mode":
        [
          "route_type":"4",
          "mode_name":"Boat",
          "route": [
                    {"route_id":"Boat-F4","route_name":"Charlestown Ferry"},
                    {"route_id":"Boat-F1","route_name":"Hingham Ferry"},
                    {"route_id":"Boat-F3","route_name":"Hull Ferry"}
                   ]
        ]
}

整个程序:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var srouteDetails = new Schema({route_id:String, route_name:String});
var srouteTypes = new Schema({route_type:String, mode_name:String, route:[srouteDetails]});
var smode = new Schema({mode:[srouteTypes]});

mongoose.connect('mongodb://localhost/test');

var routes = mongoose.model('route',smode);

var allroutes = new routes('{"mode": [{"route_type": "4","mode_name": "Boat","route": [{"route_id": "Boat-F4","route_name": "Charlestown Ferry"},{"route_id": "Boat-F1","route_name": "Hingham Ferry"},{"route_id": "Boat-F3","route_name": "Hull Ferry"}]}]}');

allroutes.save(function(err){
  if(err) throw err;
  console.log("Saved");
});

错误:

/Workspace_Js/jsontest/node_modules/mongoose/lib/document.js:158
      if (obj && '_id' in obj) continue;
                          ^
TypeError: Cannot use 'in' operator to search for '_id' in {"mode": [{"route_type": "4","mode_name": "Boat","route": [{"route_id": "Boat-F4","route_name": "Charlestown Ferry"},{"route_id": "Boat-F1","route_name": "Hingham Ferry"},{"route_id": "Boat-F3","route_name": "Hull Ferry"}]}]}
    at model.Document.$__buildDoc (/Users/Sravan/Workspace_Js/jsontest/node_modules/mongoose/lib/document.js:158:27)
    at model.Document (/Users/Sravan/Workspace_Js/jsontest/node_modules/mongoose/lib/document.js:57:20)
    at model.Model (/Users/Sravan/Workspace_Js/jsontest/node_modules/mongoose/lib/model.js:43:12)
    at new model (/Users/Sravan/Workspace_Js/jsontest/node_modules/mongoose/lib/model.js:2536:11)
    at Object.<anonymous> (/Users/Sravan/Workspace_Js/jsontest/index.js:12:17)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

请让我知道我做错了什么。我用谷歌搜索,找不到任何可以帮助我理解我的代码有什么问题的东西。

提前致谢!!!

最佳答案

要将数据作为 JSON 字符串提供给 new paths(...),您必须首先解析它:

var allroutes = new routes(JSON.parse('{"mode": []}'));

Model constructorroutes() 实现的参数需要 JavaScript Object,而不是 JSON 字符串。

Parameters:

  • doc <Object> values with which to create the document
<小时/>

您还可以从参数中删除周围的引号,以使用 initializers 定义 JavaScript 对象和数组。 (JSON 从中获得了一些语法):

var allroutes = new routes({"mode": []});

关于json - 无法通过声明的 mongoosejs 模式保存 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29336194/

相关文章:

node.js - 已安装的主机卷无法从 Azure Pipelines 中的主机写入

javascript - 通过什么技巧分别构造的两个对象可以是同一个对象?

mongodb - 如何仅对单个字段进行 MongoDB 不区分大小写的搜索?

Java MongoDB 获取子文档的值(value)

javascript - 在将少量记录插入 Postgres 数据库后,Nodejs 应用程序使用 knex 中断

java - 在 mongodb 中更新嵌套的嵌入式文档

json - WCF 和 JSON 绑定(bind)

c# - 使用 Json Key 绑定(bind)图片源 url

java - jackson .databind.JsonMappingException : getWriter() has already been called

java - 解析 JSON,不确定如何以及何时使用迭代器(Android 平台)