标签: pymongo

为什么2700条记录(每条320KB)需要30秒才能获取?

我有2700条记录MongoDB.每个文档的大小约为320KB.我使用的引擎是wiredTiger,收集的总大小约为885MB.

我的MongoDB配置如下:

systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
  engine: wiredTiger
  wiredTiger:
      engineConfig:
         cacheSizeGB: 1
         statisticsLogDelaySecs: 0
         journalCompressor: snappy
      collectionConfig:
         blockCompressor: snappy
      indexConfig:
         prefixCompression: false
net:
  bindIp: 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我的联系是通过socket:

mongo_client = MongoClient('/tmp/mongodb-27017.sock')
Run Code Online (Sandbox Code Playgroud)

收集统计数据揭示了这个结果:

db.mycol.stats()
{
    "ns" : "bi.mycol",
    "count" : 2776,
    "size" : 885388544,
    "avgObjSize" : 318944,
    "storageSize" : 972476416,
    "capped" : false,
    "wiredTiger" : {
        "metadata" : {
            "formatVersion" : 1
        },
        "creationString" : "allocation_size=4KB,app_metadata=(formatVersion=1),block_allocation=best,block_compressor=snappy,cache_resident=0,checkpoint=(WiredTigerCheckpoint.9=(addr=\"01e30275da81e4b9e99f78e30275db81e4c61d1e01e30275dc81e40fab67d5808080e439f6afc0e41e80bfc0\",order=9,time=1444566832,size=511762432,write_gen=13289)),checkpoint_lsn=(24,52054144),checksum=uncompressed,collator=,columns=,dictionary=0,format=btree,huffman_key=,huffman_value=,id=5,internal_item_max=0,internal_key_max=0,internal_key_truncate=,internal_page_max=4KB,key_format=q,key_gap=10,leaf_item_max=0,leaf_key_max=0,leaf_page_max=32KB,leaf_value_max=1MB,memory_page_max=10m,os_cache_dirty_max=0,os_cache_max=0,prefix_compression=0,prefix_compression_min=4,split_deepen_min_child=0,split_deepen_per_child=0,split_pct=90,value_format=u,version=(major=1,minor=1)",
        "type" : "file", …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo

13
推荐指数
1
解决办法
411
查看次数

pymongo sort和find_one问题

我正在尝试对user_score使用密钥调用的集合进行排序,position并获取结果的第一个文档.在这种情况下,集合user_score不存在,我希望得到结果None,但我得到了一个光标.

结果=

db.user_score.find({'score':'$lt':score}}).sort("position,pymongo.DESCENDING").limit(1)
Run Code Online (Sandbox Code Playgroud)

现在我改变了我的查询,如下所示并没有得到任何预期的结果.

2.结果=

db.user_score.find_one({'score':{'$lt':score}}, sort=[("position", pymongo.DESCENDING)])
Run Code Online (Sandbox Code Playgroud)

我的第一个查询有什么问题?

谢谢

python mongodb pymongo

12
推荐指数
2
解决办法
2万
查看次数

确定Django中的空模板变量

在模板中使用时,我无法确定变量是否为空.我已经遍历整个集合,每一个我都在寻找一个变量narrative_text.

我测试了空变量

{% ifnotequal narratives.narrative_text '' %}
Run Code Online (Sandbox Code Playgroud)

我注意到控件进入此块,但是当打印时没有打印/空白

{{  narratives.narrative_text }} 
Run Code Online (Sandbox Code Playgroud)

遇到了.

那么,如何精确检查变量是否为空?

我阅读了文档,发现无效/空模板变量被替换为''.

医生说

模板系统插入TEMPLATE_STRING_IF_INVALID设置的值.

我们是否必须明确地将其输入settings.py?我试过这样做,但我仍然没能使它工作.

c=Context({ 
    "narratives_list":all_narratives,
    "patient_name":care_seeker_name
})
Run Code Online (Sandbox Code Playgroud)

all_narratives 由pymongo数据库调用返回.

{%  for narratives in narratives_list  %}
<tr>
<td class = "date_col">
    7 Aug, 2012
</td>
{%  ifnotequal narratives.narrative_text '' %}
<td>
<div class = "narrative">
    ( text narrative )
<b> 
    {{ narratives.about }}
</b>
<br><br>
{{ narratives.narrative_text }}
</div>  
</td>   
{%  else %}
<td>
<div class="scans">
<div …
Run Code Online (Sandbox Code Playgroud)

python django django-templates mongodb pymongo

12
推荐指数
2
解决办法
2万
查看次数

MongoDB:找到数组中的最小元素并将其删除

我在MongoDB中有一个文档,其中一个看起来像这样:

{
"_id" : 100,
"name" : "Something",
"items" : [
    {
        "item" : 47,
        "color" : "red"
    },
    {
        "item" : 44,
        "color" : "green"
    },
    {
        "item" : 39,
        "color" : "blue"
    }
]
}
Run Code Online (Sandbox Code Playgroud)

在每个文档中,我需要找到最小项并删除它.所以它应该是这样的:

{
"_id" : 100,
"name" : "Something",
"items" : [
    {
        "item" : 47,
        "color" : "red"
    },
    {
        "item" : 44,
        "color" : "green"
    }
]
}
Run Code Online (Sandbox Code Playgroud)

看起来findAndModify应该在这里使用功能,但我不能再进一步了.

如何在数组中找到最小元素并将其删除?

我正在使用MongoDB和Pymongo驱动程序.

python mongodb pymongo

12
推荐指数
2
解决办法
1万
查看次数

有没有办法直接在mongoDB中存储python对象而不对它们进行序列化

我已经阅读过某些地方,你可以使用BSON将python对象(更具体地说是字典)存储为MongoDB中的二进制文件.但是现在我找不到任何与此相关的文档.

有谁知道这是怎么做到的?

python mongodb bson pymongo

12
推荐指数
2
解决办法
2万
查看次数

在pymongo中正确使用$ ne或$ not(不支持的投影选项)

我想编写以下查询到Mongo:"获取字段等于var1但/ /而不是var2的所有行"所以我有这个:

db["mydb"].find(
    {"field": var1},
    {"field": {
        "$ne": var2}
    }
)
Run Code Online (Sandbox Code Playgroud)

但它产生的错误是$ ne是一个"不支持的投影选项"我一直在谷歌搜索但我找不到类似的东西(或者这些例子似乎与我的努力没有矛盾)

python mongodb pymongo

12
推荐指数
2
解决办法
1万
查看次数

mongodb,pymongo,aggregate给出奇怪的输出(关于光标的东西)

我正在尝试获取数据库中包含最多条目的人员列表.

print db.points.aggregate(
   [
      {
         "$group":
                    {
                       "_id": "$created.user", 
                       "count":{"$sum":1}
                    }
      },
      {
         "$sort":
                   {"count":-1}
      }
   ]
)
Run Code Online (Sandbox Code Playgroud)

条目如下所示:

{
   u'id': u'342902', 
   u'_id': ObjectId('555af76a029d3b1b0ff9a4be'), 
   u'type': u'node', 
   u'pos': [48.9979746, 8.3719741], 
   u'created': {
                  u'changeset': u'7105928', 
                  u'version': u'4', 
                  u'uid': u'163673', 
                  u'timestamp': u'2011-01-27T18:05:54Z', 
                  u'user': u'Free_Jan'
               }
}
Run Code Online (Sandbox Code Playgroud)

我知道created.user存在并且可以访问.

我得到的输出仍然是:

<pymongo.command_cursor.CommandCursor object at 0x02ADD6B0>

我不应该得到一个排序列表?

mongodb pymongo aggregation-framework

12
推荐指数
1
解决办法
6628
查看次数

与原生pymongo使用相比,Mongoengine在大型文档上的速度非常慢

我有以下mongoengine型号:

class MyModel(Document):
    date        = DateTimeField(required = True)
    data_dict_1 = DictField(required = False)
    data_dict_2 = DictField(required = True)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,DB中的文档可能非常大(大约5-10MB),而data_dict字段包含复杂的嵌套文档(dicts列表的字典等等).

我遇到过两个(可能是相关的)问题:

  1. 当我运行本机pymongo find_one()查询时,它会在一秒钟内返回.当我运行MyModel.objects.first()时需要5-10秒.
  2. 当我从数据库查询单个大型文档,然后访问其字段时,只需执行以下操作需要10-20秒:

    m = MyModel.objects.first()
    val = m.data_dict_1.get(some_key)
    
    Run Code Online (Sandbox Code Playgroud)

对象中的数据不包含对任何其他对象的任何引用,因此它不是取消引用的对象的问题.
我怀疑它与mongoengine的内部数据表示的某些低效率有关,这会影响文档对象的构造以及字段访问.我能做些什么来改善这个吗?

python mongodb pymongo mongoengine

12
推荐指数
1
解决办法
3248
查看次数

PyMongo创建具有2个或更多字段的唯一索引

如何在pymongo中创建2个字段的索引,一起是唯一的?

我有这个代码:

self.db[self.mongo_collection].create_index("url", unique=True)
Run Code Online (Sandbox Code Playgroud)

但我需要与独特的urlcategory.

python mongodb pymongo mongodb-query

12
推荐指数
1
解决办法
1万
查看次数

如何使用pymongo设置Mongodb的连接超时?

我尝试设置connectTimeoutMS并设置socketTimeoutMS为较低的值,但在脚本超时前仍需要大约20秒.我没有正确使用这些选项吗?我希望脚本在5秒后退出.

def init_mongo():
    mongo_connection = MongoClient('%s' %MONGO_SERVER, connectTimeoutMS=5000, socketTimeoutMS=5000)
    if mongo_connection is None:
        return

    try:
        <code>
    except:
        <code>
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo pymongo-3.x

12
推荐指数
1
解决办法
5945
查看次数