-2

次のようなコレクション:

{"_id":Obj,"fir":1,"sec":1,"trd":"xxx"}
{"_id":Obj,"fir":1,"sec":2,"trd":"few"}   
{"_id":Obj,"fir":1,"sec":3,"trd":"ver"}   
{"_id":Obj,"fir":1,"sec":1,"trd":"xfsd"}   
{"_id":Obj,"fir":1,"sec":2,"trd":"cdsv"}   
{"_id":Obj,"fir":1,"sec":3,"trd":"xedsv"}   
{"_id":Obj,"fir":1,"sec":1,"trd":"crv"}   
{"_id":Obj,"fir":1,"sec":2,"trd":"cre"}   
{"_id":Obj,"fir":1,"sec":3,"trd":"xewfr"}   
{"_id":Obj,"fir":2,"sec":1,"trd":"xxx"}   
{"_id":Obj,"fir":2,"sec":2,"trd":"few"}   
{"_id":Obj,"fir":2,"sec":3,"trd":"ver"}   
{"_id":Obj,"fir":2,"sec":1,"trd":"xfsd"}   
{"_id":Obj,"fir":2,"sec":2,"trd":"cdsv"}   
{"_id":Obj,"fir":2,"sec":3,"trd":"xedsv"}   
{"_id":Obj,"fir":2,"sec":1,"trd":"crv"}   
{"_id":Obj,"fir":2,"sec":2,"trd":"cre"}   
{"_id":Obj,"fir":2,"sec":3,"trd":"xewfr"}

今、私はこの結果を得たい:

{"_id":Obj,"fir":1,"sec":1,"trd":"xxx"}
{"_id":Obj,"fir":1,"sec":2,"trd":"few"}
{"_id":Obj,"fir":1,"sec":3,"trd":"ver"}

これは、1秒ごとに1つの「秒」ドキュメントを取得したいだけであることを意味します.誰かがそれを照会する方法を知っていますか?

4

2 に答える 2

0

これにはグループが必要だと思います。

mongo シェルでは、次のように動作します。

 db.test.group({reduce: function(doc, out) {if (!out[doc.sec]) {out[doc.sec] = doc} }, initial:{}})

収量:

[
    {
        "1" : {
            "_id" : ObjectId("5052bd3d89e42529f53462d3"),
            "fir" : 1,
            "sec" : 1,
            "trd" : "xxx"
        },
        "2" : {
            "_id" : ObjectId("5052bd3d89e42529f53462d4"),
            "fir" : 1,
            "sec" : 2,
            "trd" : "few"
        },
        "3" : {
            "_id" : ObjectId("5052bd3d89e42529f53462d5"),
            "fir" : 1,
            "sec" : 3,
            "trd" : "ver"
        }
    }
]

pymongo で、js 関数を文字列と bson.Code でラップします。

db.test.group({},{},{},bson.Code(
        "function(doc, out) {if (!out[doc.sec]) {out[doc.sec] = doc} }"
    ))

ビンビンブーム。「秒」でキー付けされますが、変更できます。

于 2012-09-14T05:29:40.193 に答える
0

ループシーケンスに注意してください..ループのすぐ下で行を開始してはならないことを意味します

from pymongo import MongoClient
connection = MongoClient('mongodb://localhost:27017/')
db = connection.students.ctec121
student_record = {}
print()
# set flag variable
flag = True



print()
# loop for data input
while (flag):
# ask for input
      student_name = input("Enter student name")
      student_grade=input("enter grade student")                    
  # place values in dictionary
      student_record = {'name':student_name,'grade':student_grade}
 # insert the record
      db.insert(student_record)
 # should we continue?
     flag = input('Enter another record? ')
  if (flag[0].upper() == 'N'):
     flag = False

# find all documents
results = db.find()




for record in results:
    print(record['name'] + ',',record['grade'])
于 2014-09-25T12:07:25.603 に答える