簡體   English   中英

如何使用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:[]的提及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和節點的新手,更不用說我也是JS的新手,所以它可能是我不知道的一個功能。

將空數組傳遞給Mongo時,它們被解釋為空文檔{}。 Zend Json編碼器將它們解釋為空數組[]。 我知道不可能分辨出哪一個是正確的。 一些空數組嘗試發布為

陣列[空]。 而不是Array [];

這將工作正常

將空數組傳遞給Mongo時,它們被解釋為空文檔{}。 Zend Json編碼器將它們解釋為空數組[]。 我知道不可能分辨出哪一個是正確的。

在我看來,實際的php數組(當為空時)被解釋為MongoDB中的數組更合乎邏輯。 雖然這需要其他東西來識別空文檔,但它仍然比當前行為更合乎邏輯。

一種可能的解決方案是在想要引入空對象時引入一個新對象MongoEmptyObject(或使用stdObj)。

同時,一個解決方法是在php中檢測空數組,並注入空值$ arr [0] = null; 然后該對象將被解釋為mongo中的空數組。

該解決方法適用於PHP和mongo控制台。 問題:json是否允許具有空值的數組? 如果是這樣,那么解決方法是另一個錯誤的標志。

PHP:if(is_array($ value)&& empty($ value))

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

var b =

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM