Automattic / mongoose

MongoDB object modeling designed to work in an asynchronous environment.
https://mongoosejs.com
MIT License
26.88k stars 3.83k forks source link

toObject and new Schema miss sub sub sub document #3311

Closed geyang closed 9 years ago

geyang commented 9 years ago

I am writing my own differential synchronization engine, and run into this case.

Case 1

If you try to save the following data, the obj.json.cells[2].outputs[0].matadata is undefined.

schema:  noteShadow: {
                type: String,
                title: String,
                text: String,
                json: Schema.Types.Mixed,
                outline: [Schema.Types.Mixed],
                hashtags: [String]
            }

Now if you do

new SchemaModel(data).save()

where the data is the following, it would miss the field.

var data = {
    "outline": [
        {
            "indent": 0,
            "text": "new.ipynb"
        }
    ],
    "json": {
        "cells": [
            {
                "source": "# new.ipynb",
                "cell_type": "markdown"
            },
            {
                "outputs": [
                    {
                        "metadata": {},
                        "data": {
                            "text/plain": "<matplotlib.figure.Figure at 0x7f0f2b3e3110>",
                            "image/png": "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\nRK5CYII=\n"
                        },
                        "output_type": "display_data"
                    }
                ],
                "source": [
                    "xs = linspace(0, 2, 100)\n",
                    "plot(xs, cos(xs), linestyle=\"--\") "
                ],
                "cell_type": "markdown",
                "execution_count": 172
            }
        ],
        "nbformat_minor": 0,
        "nbformat": 4,
        "metadata": {
            "language_info": {
                "version": "2.7",
                "name": "python"
            },
            "kernel_info": {
                "name": "new.ipynb"
            },
            "signature": ""
        }
    },
    "text": "<h1>new.ipynb<br/></h1><div class=\"paragraph\"><br/></div>",
    "title": "new.ipynb",
    "type": "ipynb"
}

Case 2:

toObject causes the same problem when finding the document.

I just spent four hours on this problem!! I hope we can fix it soon.

vkarpov15 commented 9 years ago

Set the minimize option to false on your schema