【问题标题】:Mongoose - embedded documents are saved as stringMongoose - 嵌入文档保存为字符串
【发布时间】:2013-12-27 14:32:03
【问题描述】:

在我的节点应用程序中,我有 designation 模型和以下 Schema

var DesignationSchema = new Schema({
    _id : ObjectId,
    designation : String
});

这是嵌入在users Schema 中的。

var UserSchema = new Schema({
    fname:String,
    lname :String,
    email :String,
    password :String,
    designations : [DesignationSchema]
});

用户可以从select 列表中选择一个/多个designations。下面是我创建选择列表的jade 实现;

select(name="designations")
- for(var i = 0; i < designations.length; i++) {
    option(value="#{designations[i]}", name="designations[#{i}]") #{designation.designation}
- }

但是这些值存储为string 数组而不是DesignationSchema 数组:

{
    designations : ["{designation:'Some Value' , _id : __DESIGNATION__ID}", "{designation:'Some Value' , _id : __DESIGNATION__ID}"]
}

更新 我在expressjs 中以下列方式推送名称:

var newUser = new User(user.info);
if(user.designations && user.designations.length){
  for(var i =0; i < user.designations.length; i ++) {
    newUser.designations.push(user.designations[i]);
    //I have tried JSON.parse(user.designations[i]) but it raises error that says : 'Unexpected token d'
   //user.designations[i] object is something like : {designation:'Some Content', _id : __DESIGNATION__ID} 
   //IMPORTANT : the __DESIGNATION__ID is not inside single (') or double (") quotes. And I think this is the reason why JSON.parse is raising the error.
  }
}

【问题讨论】:

  • 您能否发布将条目推送到指定数组的代码?
  • @Saintedlama 我已经更新了我的问题。
  • 你能确定 user.designations[i] 不包含字符串而是一个解析的 json 对象吗?
  • @Saintedlama typeof user.designations[i] 是 string。值为:{ designation: 'Contractor', _id: 52a494e789cf5d181a000001 }。请注意 _id 的值。我认为它失败了 JSON.parse 。但真的不知道如何解决这个问题。
  • 好的,那么下一个问题是从浏览器到您的代码的流程中,如果指定 [i] 来自哪里,则 sn-p 内容是从哪里来的。您能否发布所有相关代码部分,包括快速应用设置?

标签: node.js mongodb express mongoose pug


【解决方案1】:

您可以省略 DesignationSchema 中的 _id,因为 Mongoose 会为您自己添加它。确保你 JSON.stringify 你 POST/PUT/etc 的数据,这样你就可以解析一些东西。

当您发回数据时,您可能还需要将内容类型指定为 application/json。这应该允许您在端点中避免 JSON.parse。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2018-07-04
    • 2015-11-15
    • 2015-07-03
    • 2011-11-27
    • 2021-04-20
    • 2018-06-30
    相关资源
    最近更新 更多