这是我的示例mongodb数据库
以上是一个包含文章数组的数据库。为简单起见,我只获取了一个对象。
database image for multiple objects ( max 20 as it's the size limit )
我有大约18k这样的条目。 我必须提取(文章和0)子章节中的描述和标题标记。 find()方法就是这里的问题..我试过这个:
for i in db.ncollec.find({'status':"ok"}, { 'articles.0.title' : 1 , 'articles.0.description' : 1}):
for j in i:
save.write(j)
执行代码后, save 文件包含:
_id
文章
_id
制品
它继续......
有关如何打印上述内容的任何帮助?
我的整个代码供参考:
import json
import newsapi
from newsapi import NewsApiClient
import pymongo
from pymongo import MongoClient
client = MongoClient()
db = client.dbasenews
ncollec = db.ncollec
newsapi = NewsApiClient(api_key='**********')
source = open('TextsExtractedTemp.txt', 'r')
destination = open('NewsExtracteddict.txt', "w")
for word in source:
if word == '\n':
continue
all_articles = newsapi.get_everything(q=word, language='en', page_size=1)
print(all_articles)
json.dump(all_articles, destination)
destination.write("\n")
try:
ncollec.insert(all_articles)
except:
pass
答案 0 :(得分:1)
好的,所以我查了一下来更新我对pymongo的生锈记忆,这就是我找到的。
正确的查询应该是:
db.ncollec.find({ 'status':"ok",
'articles.title' : { '$exists' : 'True' },
'articles.description' : { '$exists' : 'True' } })
现在,如果你这样做:
query = { 'status' : "ok",
'articles.title' : { '$exists' : 'True' },
'articles.description' : { '$exists' : 'True' } }
for item in db.ncollect.find(query):
print item
并且它没有显示任何内容,查询是正确的,但您没有正确的数据库,或正确的树,或其他任何内容。
但我向你保证,你向我展示了数据库,如果你这样做......
query = { 'status' : "ok",
'articles.title' : { '$exists' : 'True' },
'articles.description' : { '$exists' : 'True' } }
for item in db.ncollect.find(query):
save.write(item[0]['title'])
save.write(item[0]['description'])
首先,它会做你想做的事。
现在,键item[0]
可能不太好,但为此,我无法提供任何帮助,因为它是在屏幕上显示的。 :)
好的,现在。我找到了一些有点复杂的东西,但很酷:)
但我不确定它是否适合你。我怀疑你给了我们一棵错误的树,因为当你做.find( {'status' : 'ok'} )
时,它没有返回任何内容,它应该返回带有'status' : 'ok'
的所有文件,因为你有很多......
无论如何,这是一个查询,您应该使用 .aggregate()
方法,而不是.find()
:
elem = { '$match' : { 'status' : 'ok', 'articles.title' : { '$exists' : 'True'}, 'articles.description' : { '$exists' : 'True'}} }
[ elem, { '$unwind' : '$articles' }, elem ]
如果您想了解其工作原理,我邀请您read this page。
此查询将仅返回数组中具有标题和描述且状态为OK的元素。如果元素没有标题或描述,则会被忽略。