我有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) 我正在尝试对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)
我的第一个查询有什么问题?
谢谢
在模板中使用时,我无法确定变量是否为空.我已经遍历整个集合,每一个我都在寻找一个变量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) 我在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驱动程序.
我已经阅读过某些地方,你可以使用BSON将python对象(更具体地说是字典)存储为MongoDB中的二进制文件.但是现在我找不到任何与此相关的文档.
有谁知道这是怎么做到的?
我想编写以下查询到Mongo:"获取字段等于var1但/ /而不是var2的所有行"所以我有这个:
db["mydb"].find(
{"field": var1},
{"field": {
"$ne": var2}
}
)
Run Code Online (Sandbox Code Playgroud)
但它产生的错误是$ ne是一个"不支持的投影选项"我一直在谷歌搜索但我找不到类似的东西(或者这些例子似乎与我的努力没有矛盾)
我正在尝试获取数据库中包含最多条目的人员列表.
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>
我不应该得到一个排序列表?
我有以下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列表的字典等等).
我遇到过两个(可能是相关的)问题:
当我从数据库查询单个大型文档,然后访问其字段时,只需执行以下操作需要10-20秒:
m = MyModel.objects.first()
val = m.data_dict_1.get(some_key)
Run Code Online (Sandbox Code Playgroud)对象中的数据不包含对任何其他对象的任何引用,因此它不是取消引用的对象的问题.
我怀疑它与mongoengine的内部数据表示的某些低效率有关,这会影响文档对象的构造以及字段访问.我能做些什么来改善这个吗?
如何在pymongo中创建2个字段的索引,一起是唯一的?
我有这个代码:
self.db[self.mongo_collection].create_index("url", unique=True)
Run Code Online (Sandbox Code Playgroud)
但我需要与独特的url和category.
我尝试设置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)