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

How can I save an empty array into mongodb using js

本文关键字:保存 mongodb 数组 何使用 js      更新时间:2023-09-26

基本上我让我的应用程序运行起来,但我遇到了一个问题:如果我传递一个包含要保存的空数组的对象,该数组不会保存到数据库中。我不确定这是 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" : []}