簡體   English   中英

如何使用 Pymongo 和 MongoDB 返回特定字段?

[英]How to return a specific fields using Pymongo and MongoDB?

我試圖從我的 MongoDB 數據庫中返回兩個字段,這個查詢正確地從客戶端發回我的用戶名和帖子:

db.users.find({'email_address': /^johnny/}, {'username': 1, 'user_posts': 1, '_id': 0});

我正在嘗試將其切換到 PyMongo,以便我可以在 Python 中查詢,我的查詢如下所示:

regx = Regex('^{0}'.format('johnny'))
query = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}
user_list = mycol.find(query).limit(5)

它失敗的地方在這里:

{'username': 1, 'user_posts': 1, '_id': 0}

由於沒有此過濾器,文件將完全正常發送。 這樣我就從 PyMongo 收到了這個錯誤信息:

TypeError: filter must be an instance of dict, bson.son.SON, or any other type that inherits from collections.Mapping

我假設我的過濾器格式不正確,它不再是字典,因此嘗試了用引號括起來然后使用 then.format() 等的各種替代方法,但似乎無法達到神奇的組合。

原來這很容易..我只需要有兩本字典。 1 個用於查詢,另一個用於篩選。

regx = Regex('^{0}'.format('johnny'))
filter_stuff = {'username': 1, 'user_posts': 1, '_id': 0}

然后按如下方式構建完整的查詢:

user_list = mycol.find(query, filter_stuff).limit(5)

問題是以下不是字典,而是兩個字典的元組:

query = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}

如果你想直接使用它,你可以用

user_list = mycol.find(query[0], query[1]).limit(5)

但可能最好像這樣將它實際分配給兩個單獨的變量

query, filter = {'postcode': regx}, {'username': 1, 'user_posts': 1, '_id': 0}

接着

user_list = mycol.find(query, filter).limit(5)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM