如何使用 js 将空数组保存到 mongodb 中
How can I save an empty array into mongodb using js
基本上我让我的应用程序运行起来,但我遇到了一个问题:如果我传递一个包含要保存的空数组的对象,该数组不会保存到数据库中。我不确定这是 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 编码器会将它们解释为空数组 []。我知道不可能说出哪一个是正确的。如果是空数组,请尝试发布为
数组[空];而不是数组[];
这将正常工作
当将空数组传递给 Mongo 时,它们被解释为空文档 {}。Zend Json 编码器会将它们解释为空数组 []。我知道不可能说出哪一个是正确的。
在我看来,将实际的php数组(为空时)解释为MongoDB中的数组更合乎逻辑。尽管这需要其他东西来识别空文档,但它仍然比当前的行为更合乎逻辑。
一个可能的解决方案是,每当想要引入一个空对象时,引入一个新对象MongoEmptyObject(或使用stdObj)。
同时,一种解决方法是在 php 中检测空数组,并注入一个空值 $arr[0] = null;然后该对象将被解释为 mongo 中的空数组。
该解决方法在 PHP 和 mongo 控制台中都有效。问题:json 是否允许具有空值的数组?如果是这样,那么解决方法是另一个错误的标志。
.PHP:if (is_array($value) && empty($value))
{ $value[0] = 空; }蒙戈控制台:
变量 b =
{hej:"da", arr: [null]}
db.test.save(b); db.test.find();
{"_id" : "4a4b23adde08d50628564b12" , "hej" : "da" , "arr" : []}
- NodeJS expressJS使用multer和passport将文件上传并保存到MongoDB
- UUID未在MongoDB中保存
- 将对象推入mongoDB,[“object object”]被保存
- MongoDB Mongoose使用数组保存或更新
- 对象推送到MongoDB中保存为字符串的子数组中
- 如何使用 js 将空数组保存到 mongodb 中
- MongoDB 在保存数据时抛出错误(拓扑已损坏)
- 在循环中保存到MongoDB
- 从保存在节点 mongodb 本机中的 beeing 中排除字段
- 在MongoDB中保存虚线字段
- MongoDB+Express - 猫鼬不保存“默认”值
- 数据未保存在使用Mongoose的MongoDB中
- 通过猫鼬在mongodb中保存家谱的最佳实践是什么
- 使用 Mongoose 将数组(“标签”)保存到 MongoDB
- 如何让变量保存 mongodb 数据库
- 关于帖子,评论,保存和喜欢的Mongodb数据结构
- 将一天中的时间保存为mongodb中的数字,但以人类格式显示(使用流星自动形成)
- 从OpenShift Mongodb保存文档
- 如何使用猫鼬保存嵌套的mongoDB属性
- 如何在数组中保存mongodb集合?同时将mongoose与expressJS一起使用