[英]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.