【问题标题】:Embedded document becomes null in node.js嵌入文档在 node.js 中变为空
【发布时间】:2015-05-17 21:36:32
【问题描述】:

我有一个嵌入文档如下:

var artist = new Schema({
        name: {
            type: String,
      trim:true,
      required:'Please fill artist name'
        },
        role : {
            type: String,
            trim: true,
            default: ''
        },
        isPrimary : {
            type: Boolean,
            trim: false,
        }
    });

其他文件如下:

var AlbumSchema = new Schema({
  language: {
        type: String,
        default: '',
        trim: true
    },
    artists: [artist],
    title: {
        type: String,
        default: '',
        required: 'Please fill Album title',
        trim: true
    });

当我发送请求并打印 req.body 值时,我得到的值如下:

{
      title: 'Demo Add',
      artists:  
       '[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob 
              ject:227"}]',
        language:'EN'
}

但是一旦我将它转换为对象

var album = new Album(req.body);

然后打印相册,我得到的结果如下:

{
      title: 'Demo Add',
      artists: [],
      language: 'English' 
}

我不知道为什么艺术家的价值在案件期间变为空。

编辑:

exports.SaveAlbum = function(req,res){
        var album = new Album(req.body);
        var data = _.pick(req.body, 'type')
                , uploadPath = path.normalize('/album_uploads')
                , file = req.files.file;
        var user = req.user;
        album.cover_art_path = file.path;
        if (user) {
                var upsertData = album.toObject();
                delete upsertData._id;
                Album.update({_id: album.id}, upsertData, {upsert: true},function(err)
                {
                        if (err) {
                                return res.status(400).send({
                                    message: errorHandler.getErrorMessage(err)
                                });
                }
                else {
                                res.json(album);
                }
                });
        } else {
            res.status(400).send({
                message: 'User is not signed in'
            });
        }

};

【问题讨论】:

  • 你在用猫鼬吗?
  • 是的,我正在使用猫鼬
  • 您正在更新_id ...我认为这不好!
  • 目前我的问题是我没有从 req.body 获取数据到艺术家数组。除了这个按预期工作。
  • 但您也进行了更新,并通过var upsertData = album.toObject()您确定您的参数运行正确吗?我不知道你所说的 upsert 等是什么意思

标签: javascript node.js mongodb mongoose


【解决方案1】:

数组中的 '' 存在问题,如下所述。当按照告知发送 req.body 时,这就是起源问题。

你的 req.body 是:

{
      title: 'Demo Add',
      artists: '[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob 
              ject:227"}]',
        language:'EN'
}

它必须是:

{
      title: 'Demo Add',
      artists: [{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob 
              ject:227"}],
        language:'EN'
}

这个引号使艺术家成为一个字符串,而不是一个数组,然后在保存时失败。

那么,解决办法是:

var album = new Album(req.body); 
album.artists = JSON.parse(req.body.artists);

希望能提供帮助。

谢谢

【讨论】:

  • 然后查找代理 vas 合并结果的变量(已更新)并在保存命令之前添加 updated.markModified('artists')
  • 从我的问题中你可以看到我更新的对象有艺术家的 [] 所以即使在 markModified 之后它仍然是空白的。
  • 您正在添加 ' ' 以在放置时定义艺术家。你确定你需要那些''?我认为应该是:artists :[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob ject:227"}];
  • 这是默认值,如果我没有什么可命名的,它将适用
  • 也许您可以将您的保存方法发布到服务器上以便我们进行分析?
猜你喜欢
  • 2018-05-15
  • 2011-12-04
  • 2020-08-25
  • 2012-04-14
  • 2018-08-21
  • 2020-10-31
  • 2011-03-10
  • 2013-11-13
  • 2016-11-28
相关资源
最近更新 更多