1

Am working on python and mongodb. I am trying to find names from a table with the by matching them with their phone no.s. The phone number is in a list which i created by getting the numbers from another table. Its working fine but I am getting the output being printed twice.

phone = ["9585507882","9542158582"]           
datum = []
for i in phone:
    cursor = db.name.find({"phone": i},{"_id": False})
    value = yield cursor.count()
    if value is 0:
        pass
    else:
        result = []
        for document in (yield cursor.to_list(length=100)):
            datum.append(document)
        print(datum)
        self.write(bson.json_util.dumps({"result": datum}))

My output is

{"result": [{"phone": "9585507882", "name": "Sanjay"}]}{"result": [{"phone": "9585509882", "name": "Sanjay"}, {"phone": "9542158582", "name": "Joe"}]}

can anyone help me out with this problem.

2
  • I've never seen yield used this way. What's this about? Commented Nov 2, 2015 at 9:48
  • @TimPietzcker I think this SO is using motor Commented Nov 16, 2015 at 4:30

2 Answers 2

1

You're calling self.write() within the for loop, while you're still constructing datum. Move it outside so it runs only after all the data have been collected:

for i in phone:
    [...]
    if value == 0:  # don't use "is" for value comparison!
        pass
    else:
        [...]
        for document in (yield cursor.to_list(length=100)):
            datum.append(document)
        [...]
self.write(bson.json_util.dumps({"result": datum}))

Also, instead of

if value == 0:
    pass
else:
    [do_stuff]

better do

if value:
    [do_stuff]

Also, what's the use of result = []? You're not doing anything with that list.

Sign up to request clarification or add additional context in comments.

Comments

0

More simple way would be,

phone = ["9585507882","9542158582"]           
cursor = db.name.find({"phone": {"$in":phone}},{"_id": 0}).limit(100)       #$in will get you all document in phone array
result = list(cursor) #list(cursor) will convert cursor to python list
#you can then do anything you want

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.