基本上我让我的应用程序运行起来,但我遇到了一个问题:如果我传递一个包含要保存的空数组的对象,则该数组不会保存到数据库中。我不确定这是 js 或 mongo 驱动程序中的问题,但为了保存空数组,我需要像这样传递数组:products: ['']
.
这是我的 mongo 文档的结构:
_id: ObjectId(...),
name: 'String',
subcategories: [
{
subcategory: 'string',
products: [
{
name: 'string'
price: integer
}
]
}
]
因此,在我的前端,我通过 ajax 调用将一个新对象推送到子类别数组中来获取整个文档。新对象如下所示:
{subcategory:'string', products:['']}
在我需要在数组中插入一个新对象之前,这可以正常工作:因为我已经抓取了整个对象,将新对象推送到数组中,前一个看起来像这样:
{subcategory: 'string'}
没有提及products:[]
进程中的数组。
我该如何解决这个问题?我需要能够在我的对象中有空数组。
编辑
我在前端做了什么:用 $.get
得到整个对象返回:
var obj =
_id: ObjectId(...),
name: 'String',
subcategories: [
{
subcategory: 'Subcategory1',
products: [
{
name: 'string'
price: integer
}
]
}
];
然后在前端我将新的对象类别推送到子类别数组中:
data.subcategories.push({subcategory: 'Subcategory2', products: ['']})
其中 subcat 是一个带有类别名称的字符串。在我的数据库上,我可以看到我已经成功添加了对象:
var obj =
_id: ObjectId(...),
name: 'String',
subcategories: [
{
subcategory: 'Subcategory1',
products: [
{
name: 'string'
price: integer
}
]
},
{
subcategory: 'Subcategory2'
products: []
}
];
问题是当我想添加另一个子类别时,前一个返回空:
var obj =
_id: ObjectId(...),
name: 'String',
subcategories: [
{
subcategory: 'Subcategory1',
products: [
{
name: 'string'
price: integer
}
]
},
{
subcategory: 'Subcategory2'
},
{
subcategory: 'Subcategory3'
products: []
},
];
因为在某些时候空数组已从对象中删除。就像我说的,我确实在前端解决了这个问题,所以错误 Jade 被抛出已得到解决,但我仍然觉得奇怪的是 products: []
正在从文档中删除。
我是 MongoDb 和 node 的新手,更不用说我也是 JS 的新手,所以这很可能是我不知道的一个特性。
最佳答案
将空数组传递给 Mongo 时,它们被解释为空文档,{}。 Zend Json 编码器会将它们解释为空数组 []。我知道无法判断哪个是正确的。 如果出现空数组,请尝试发布为
数组[null]; 而不是 Array[];
这会很好用
关于javascript - 如何使用 js 将空数组保存到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032043/