如何使用js将空数组保存到mongodb中

Wag*_*sUK 5 javascript arrays mongodb node.js

基本上我让我的应用程序运行但我遇到了一个问题:如果我传递一个包含空数组的对象要保存,则该数组不会保存到数据库中.我不确定这是js或mongo驱动程序中的问题,但为了保存空数组,我需要像这样传递数组:products: [''].

这是我的mongo文档的结构:

_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'string',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

所以在我的前端,我通过ajax调用抓取整个文档,将一个新对象推入子类别数组.新对象如下所示:

{subcategory:'string', products:['']}

这工作正常,直到我需要在数组中插入一个新对象:因为我抓住了整个对象,将新对象推送到数组,前一个看起来像这样:

{subcategory: 'string'}

products:[]在这个过程中丢失了对数组的提及.

我怎么能绕过这个?我需要能够在我的对象中拥有空数组.

编辑

我在前端做了什么:得到了$.get返回的整个对象:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    }
];
Run Code Online (Sandbox Code Playgroud)

然后在前端我已经在子类别数组中推送了新的对象类别:

data.subcategories.push({subcategory: 'Subcategory2', products: ['']})
Run Code Online (Sandbox Code Playgroud)

其中subcat是一个带有类别名称的字符串.在我的数据库上,我可以看到我已经成功添加了该对象:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    },
    {
         subcategory: 'Subcategory2'
         products: []
    }
];
Run Code Online (Sandbox Code Playgroud)

问题是当我想添加另一个子类别时,前一个子类别返回空:

var obj = 
_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'Subcategory1',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    },
    {
         subcategory: 'Subcategory2'
    },
    {
         subcategory: 'Subcategory3'
         products: []
    },
];
Run Code Online (Sandbox Code Playgroud)

因为在某些时候从对象中删除了空数组.就像我说的那样,我确实在前端解决了这个问题,因此错误的jade抛出已被解决,但我仍然觉得奇怪的products: []是它正在从文档中删除.

我是MongoDb和节点的新手,更不用说我也是JS的新手,所以它可能是我不知道的一个功能.

小智 0

当将空数组传递给 Mongo 时,它们被解释为空文档 {}。Zend Json 编码器会将它们解释为空数组 []。我知道不可能判断哪一个是正确的。如果出现空数组,请尝试发布为

数组[空];而不是数组[];

这会工作得很好