2015-04-02 56 views
1

在mongo集合下面有一個名爲'職責'的字段。該字段的值是一個很長的字符串,因爲它包含下面示例文檔中顯示的項目符號值)。是否有存儲這個值沒有更好的辦法。如何在mongo字段中存儲項目符號列表或值列表

{ "_id" : ObjectId("551d6f4c40cd93dd6bec7dbf"), 
    "name" : "xxxx", 
    "desc" : "xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
"teamsize" : 11, 
"location" : "xxxxx", 
"startDate" : ISODate("2014-06-01T00:00:00Z"), 
"endDate" : ISODate("2015-03-01T00:00:00Z"), 
"responsibilities" : "1. xxxxxxx , 2.xxxxxx, 3.xxxxxxxx", 
"organisationName" : "xxxxxxxx" 

}

+0

你的問題相當不清楚,這個項目列表從哪裏來?你有任何mongo系列的樣品文件嗎? – chridam 2015-04-02 16:43:11

+0

編輯該問題以使其更清楚。在我的情況下,項目符號列表來自一個休息端點。 – trial999 2015-04-02 16:51:37

+0

列表中的元素是什麼?字符串?數字?名單? – wdberkeley 2015-04-02 18:31:26

回答

1

(而不是存儲長字符串值),你可以分割字符串,並存儲在數組中字段的元素。拆分字符串需要一些正則表達式操作:

var responsibilities = "1. Jnflkvkbfjvb1 2. Kjnfbhvjbv2 3. kbvrjvbrjvb3 • Jnflkvkbfjvb4 • Kjnfbhvjbv5 • kbvrjvbrjvb6 A. Jnflkvkbfjvb7 B. Kjnfbhvjbv8 C. kbvrjvbrjvb9 I. Jnflkvkbfjvb10 II. Kjnfbhvjbv11 III. kbvrjvbrjvb12"; 

var myarray = responsibilities.split(/([0-9A-Z]+[.)]|•)\s+/); 
var res_array = myarray.filter(function(el, index) { 
    return index % 2 === 0; // JavaScript is zero-based want elements with a modulo of 0 - odd numbered indexes: 
}); 

console.log(res_array[0]); // Jnflkvkbfjvb1 
console.log(res_array[4]); // Kjnfbhvjbv5 
console.log(res_array[10]); // Kjnfbhvjbv11 

正則表達式的含義:

 
(    # group 1 
    [0-9A-Z]+ # any combination of digits 0-9 or letters A-Z 
    [.)]   # either a dot or a closing paren 
    |   # ...or 
    •   # a bullet sign 
)\s+   # end group 1, match any following whitespace 

一旦你得到了數組,那麼在您的收藏做一個更新如下:

db.collection.update(
    { name: "xxxx" }, 
    { $push: { duties: { $each: res_array } } } 
) 
+1

謝謝你的作品完美! – trial999 2015-04-02 22:20:28

相關問題