2015-04-02 51 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

相关问题