2017-01-09 1 views
0
내가 num_atoms로 컬렉션을 정렬하려고

이 JS 코드 wtih :정렬 작업 후 시퀀스 번호를 mongoDB에 삽입하는 방법은 무엇입니까?

db.zinc_data.find().sort({"num_atoms":-1}).forEach(function(mydoc){ 
    db2 = connect("database:port/zinc_Purtest_sort"); 
    db2.zinc_data.insert(mydoc); 
}) 

mongos> db.zinc_data.find({}).pretty() 
{ "_id" : ObjectId("586e3ac78426af7af1425655"), "num_atoms" : 76, "idxd" : 5 } 
{ "_id" : ObjectId("586e3ac88426af7af14256b2"), "num_atoms" : 74, "idxd" : 89} 
{ "_id" : ObjectId("586e3ac78426af7af1425666"), "num_atoms" : 66, "idxd" : 64} 
{ "_id" : ObjectId("586e3ac78426af7af1425690"), "num_atoms" : 63, "idxd" : 34} 
{ "_id" : ObjectId("586e3ac48426af7af1425651"), "num_atoms" : 62, "idxd" : 1 } 
{ "_id" : ObjectId("586e3ac88426af7af1425697"), "num_atoms" : 61, "idxd" : 96} 
{ "_id" : ObjectId("586e3ac88426af7af14256a9"), "num_atoms" : 61, "idxd" : 97} 
{ "_id" : ObjectId("586e3ac78426af7af1425685"), "num_atoms" : 60, "idxd" : 90} 
{ "_id" : ObjectId("586e3ac78426af7af142568a"), "num_atoms" : 60, "idxd" : 61} 
{ "_id" : ObjectId("586e3ac88426af7af14256a2"), "num_atoms" : 59, "idxd" : 66} 
{ "_id" : ObjectId("586e3ac78426af7af142566e"), "num_atoms" : 58, "idxd" : 93} 
{ "_id" : ObjectId("586e3ac78426af7af1425677"), "num_atoms" : 58, "idxd" : 62} 
{ "_id" : ObjectId("586e3ac78426af7af1425683"), "num_atoms" : 58, "idxd" : 94} 
{ "_id" : ObjectId("586e3ac78426af7af142568f"), "num_atoms" : 58, "idxd" : 30} 
{ "_id" : ObjectId("586e3ac88426af7af14256aa"), "num_atoms" : 58, "idxd" : 63} 
{ "_id" : ObjectId("586e3ac48426af7af1425652"), "num_atoms" : 57, "idxd" : 2 } 
{ "_id" : ObjectId("586e3ac88426af7af14256ac"), "num_atoms" : 57, "idxd" : 85} 
{ "_id" : ObjectId("586e3ac78426af7af1425676"), "num_atoms" : 56, "idxd" : 69} 
{ "_id" : ObjectId("586e3ac78426af7af142567a"), "num_atoms" : 56, "idxd" : 58} 
{ "_id" : ObjectId("586e3ac78426af7af142568e"), "num_atoms" : 56, "idxd" : 91} 

을 한 후 나는 일련 번호 (도 OK 인 새로운 일련 번호 "idxd2"를 삽입)와 "idxd"을 업데이트 할, 나는 시도 :

var count=1; 
db2.zinc_data.find().forEach(function(mydoc){ 
    db2.zinc_data.update({"idxd":{$gt:0}},{$set:{"idxd":count}}); 
    count++; 
    print(count); 
}) 

하지만 작동하지 않습니다. 이 컬렉션에는 20000000 개의 행 데이터가 있으므로 "idxd를 찾고 idxd를 업데이트"할 수 없으며 정렬 작업 후에 일련 번호를 가져 오려고합니다.

아무 도움이 필요하거나 다른 사람이 나에게 좋은 문서 또는 자습서를 가르쳐 줄 수있는 경우 두 가지 방법 모두 도움이 될 것입니다. '

감사합니다.

답변

1

첫 번째 단계에서 일련 번호를 삽입 할 수 있습니다.

var counter = 0; 
db.zinc_data.find().sort({"num_atoms":-1}).forEach(function(mydoc){ 
    db2 = connect("database:port/zinc_Purtest_sort"); 
    mydoc.idxd = ++counter; 
    db2.zinc_data.insert(mydoc); 
}) 

출력 :

> db.<sorted_data_table>.find({}, {_id : 0}) 
{ "num_atoms" : 76, "idxd" : 1 } 
{ "num_atoms" : 74, "idxd" : 2 } 
{ "num_atoms" : 66, "idxd" : 3 } 
{ "num_atoms" : 63, "idxd" : 4 } 
{ "num_atoms" : 62, "idxd" : 5 } 
{ "num_atoms" : 61, "idxd" : 6 } 
{ "num_atoms" : 61, "idxd" : 7 } 
{ "num_atoms" : 60, "idxd" : 8 } 
{ "num_atoms" : 60, "idxd" : 9 } 
{ "num_atoms" : 59, "idxd" : 10 } 
{ "num_atoms" : 58, "idxd" : 11 } 
{ "num_atoms" : 58, "idxd" : 12 } 
{ "num_atoms" : 58, "idxd" : 13 } 
{ "num_atoms" : 58, "idxd" : 14 } 
{ "num_atoms" : 58, "idxd" : 15 } 
{ "num_atoms" : 57, "idxd" : 16 } 
{ "num_atoms" : 57, "idxd" : 17 } 
{ "num_atoms" : 56, "idxd" : 18 } 
{ "num_atoms" : 56, "idxd" : 19 } 
{ "num_atoms" : 56, "idxd" : 20 } 
+0

그것은 작동합니다, 감사합니다. – Pchen

관련 문제