2015-08-08 56 views
2

我對mongoDB非常陌生,並試圖將一個對象插入數據庫。 (哇,比mySQL更有趣...)。我正在使用strongloop的loopback框架和它的mongoDB連接器。使mongoDB用字符串替換單值數組

的對象是xml2js解析我收到的XML消息,解析並插入到蒙戈它看起來像這樣經過:

{ 
    "_id": ObjectID("55c61ee9391da88435c5753f"), 
    "offerChange": [ 
     { 
      "foo": [ 
       "bar" 
      ], 
      "baz": [ 
       "foo" 
      ] 
     } 
    ] 
} 

,你可以看到,所有關鍵的值是數組,但他們都包含只有一個值。很明顯,我可以在插入或xml解析之前將它們轉換爲字符串,但這需要循環遍歷所有對象的鍵或首先爲工作人員提供更多工作,這是我想避免的。真實的物體比上面顯示的要大得多。

有沒有辦法告訴mongoDB在文檔創建之前或之後自動將只有一個值的數組轉換爲字符串?

+0

這不是一個明智的想法。就「對象一致性」而言,最好將它們保留爲數組,即使它們只包含單個條目。爲什麼?想想用代碼定義一個對象。什麼「類型」給你給這個領域。 「數組或字符串?」。現在做的有效性檢查沒有太多的意義嗎?雖然MongoDB文檔是無模式的,並且沒有任何東西可以阻止文檔之間的結構,但它不應該(除了明確的「繼承模式」之外)。所以它會被「建議」保持這種狀態。 –

+0

這就是說,如果你的** only **問題是XML轉換器處理你只有**想作爲單一值的東西的相當「古怪」的方式,那麼通過一切手段在你的問題中用你正在使用的特定代碼,而我或其他人會建議對它進行「修復」,以便每次獲得單一值。 –

+0

@BlakesSeven不,實際上我認爲你的第一個評論是非常合理的,我想我會保留它。 – baao

回答

1

您不需要在應用程序/數據庫中循環並將數組轉換爲字符串。 xml2js提供了一種簡潔的方式來返回字符串,如果只有一個項目和數組,如果有更多的項目。

explicitArray(默認值:true):如果 爲true,則始終將子節點放入數組中;否則只有存在多個數組時才創建數組。

啓動解析器如下

parseString(xml, {explicitArray: false}, function (err, result) { 
});