Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用js将空数组保存到mongodb中_Javascript_Arrays_Node.js_Mongodb - Fatal编程技术网

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

Javascript 如何使用js将空数组保存到mongodb中,javascript,arrays,node.js,mongodb,Javascript,Arrays,Node.js,Mongodb,基本上,我让我的应用程序运行起来,但我遇到了一个问题:如果我传递了一个包含要保存的空数组的对象,那么该数组不会保存到数据库中。我不确定这在js或mongo驱动程序中是否有问题,但为了保存空数组,我需要像这样传递数组:products:[''] 这是我的mongo文档的结构: _id: ObjectId(...), name: 'String', subcategories: [ { subcategory: 'string', products: [

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

这是我的mongo文档的结构:

_id: ObjectId(...),
name: 'String',
subcategories: [
    {
        subcategory: 'string',
        products: [
            {
                 name: 'string'
                 price: integer
            }
        ]
    }
]
因此,在我的前端,我通过一个ajax调用将一个新对象推到子类别数组中来获取整个文档。新对象如下所示:

{子类别:'string',产品:['']}

在我需要在数组中插入一个新对象之前,这一切都正常:因为我抓取了整个对象,将新对象推到数组中,前一个看起来像这样:

{subcategory:'string'}

在过程中失去了对
产品的提及:[
阵列

我怎样才能避开这件事?我需要能够在我的对象中有空数组

编辑

我在前端所做的:使用
$获取整个对象。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抛出的错误已经得到了解决,但我仍然觉得奇怪的是,
产品:[]
正在从文档中删除


我不熟悉MongoDb和node,更不用说我也不熟悉JS,所以这可能是我不知道的一个特性。

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

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


当将空数组传递给Mongo时,这将正常工作,因为它们被解释为空文档,{}。Zend Json编码器将它们解释为空数组[]。我知道不可能分辨出哪一个是正确的

在我看来,在MongoDB中将实际的php数组(当为空时)解释为数组更符合逻辑。尽管这将需要其他东西来识别空文档,但它仍然比当前的行为更符合逻辑

一种可能的解决方案是,只要想引入一个空对象,就引入一个新对象MongoEmptyObject(或使用stdObj)

同时,解决方法是在php中检测空数组,并注入null值$arr[0]=null; 然后在mongo中将对象解释为空数组

该解决方案在PHP和mongo控制台中都可以使用。问题:json是否允许使用空值的数组?如果是这样,那么解决方法就是另一个bug的标志

PHP: if(is_数组($value)&&empty($value))

{$value[0]=null;} Mongo控制台:

变量b=

{hej:“da”,arr:[null]}

db.test.save(b); db.test.find()


{“_id”:“4a4b23adde08d50628564b12”,“hej”:“da”,“arr”:[]}

您能解释一下为什么需要这样做吗?MongoDB故意不保存“空”数据(空数组就是这样)。我建议NodeJS中的客户端代码应该提供一个默认值。空数组不是空数据。products:null或products:not existing与products:[]之间有很大的区别,其中之一是不同的BSON类型。有可能存在bug-OP,我并不完全清楚你的代码在做什么。当你说你“抓取了整个对象”时,你指的是哪个对象?你能给出更新文档所用的确切代码吗?听起来您可能没有将update()与$push一起使用,而是在客户端代码中本地推送?另外,您使用的驱动程序的版本是什么,MongoDB的版本是什么?好的,首先,我在前端遇到一个错误,因为Jade无法循环通过一个未定义的对象(如果数组未保存category.subcategories,则被重新调整为未定义)。我在前端使用了一个条件进行了修复,因此错误消失了@AsyaKamsky我在from-end中所做的是按照上面所述抓取整个对象,然后将更改推送到数组中?这是可复制的吗?