我是MongoDB的新手,我不知道如何解决下一个问题:
我有这样的文档集合:
{
"URL": "www.stackoverflow.com",
"TAGS": [
{"NAME": "question", "VOTES": 3},
{"NAME": "answer", "VOTES": 5},
{"NAME": "problem", "VOTES": 2}
]
}
Run Code Online (Sandbox Code Playgroud)
首先,我想要所有包含列表中所有标签的Urls.我通过查询解决了这个问题:
db.links.find( { "Tags.Name" : { $all: ["question","answers"] } } );
Run Code Online (Sandbox Code Playgroud)
但是这个查询返回了整个正确的文档,只有正确的文档,只有我要求的标记.
我正在寻找的结果是:
{
"URL": "www.stackoverflow.com",
"TAGS": [{"NAME": "question", "VOTES": 3},
{"NAME": "answer", "VOTES": 5}]
}
Run Code Online (Sandbox Code Playgroud)
并不是:
{
"URL": "www.stackoverflow.com",
"TAGS": [{"NAME": "question", "VOTES": 3},
{"NAME": "answer", "VOTES": 5},
{"NAME": "problem", "VOTES": 2}]
}
Run Code Online (Sandbox Code Playgroud)
因为我只要求标签["问题","答案"].
我想过使用MapReduce或解析结果集,但我不知道它是否是解决问题的正确方法.也许有一个内置函数可以更有效地解决它.
谢谢!
我目前正在基于Django的项目中处理Celery任务.我们将raven配置为将所有未捕获的异常和日志消息发送到Sentry,如文档中所述.
一切都很好,除了芹菜任务中未被捕获的异常.例如,如果我运行此任务:
@app.task
def test_logging():
log.error('Testing logging inside a task')
raise IndexError('Testing exception inside a task')
Run Code Online (Sandbox Code Playgroud)
我只在Sentry中看到log.error(...)但未被IndexError捕获的异常.我尝试try-except在log.exception(...)内部使用一个块来处理异常并且它确实有效,但我认为它不可扩展来捕获这样的所有异常.
所以,问题只是未被捕获的异常,以某种方式处理不当.
这些是我目前的包版本:
celery (3.1.17)
raven (5.1.1)
Django (1.7.1)
Run Code Online (Sandbox Code Playgroud)
你能帮助我朝某个方向前进吗?
谢谢你的时间!
我实际上是在搜索引擎项目中工作.
我们正在使用python + mongoDb.
我遇到以下问题:
在对mongo db执行find()命令后,我有一个pymongo游标.
pymongo游标有大约20k的结果.
我注意到,与正常迭代相比,pymongo游标上的迭代非常慢,例如相同大小的列表.
我做了一点基准测试:
-iteration在20k字符串列表中:0.001492秒
- 在pymongo光标上获得20k结果:1.445343秒
差别真的很大.这个数量的结果可能不是问题,但如果我有数百万的结果,那么时间将是不可接受的.
有没有人知道为什么pymongo游标太慢而不能迭代?
我知道如何在更短的时间内迭代光标?
一些额外的信息:
我实际上在django项目中工作,我不确定访问一个特定对象页面的URL的最佳格式.
我在想这些替代方案:
1) Using the autoincremental ID => .com/object/15
Run Code Online (Sandbox Code Playgroud)
这是最简单和众所周知的方法."id_object"是数据库引擎在保存对象时生成的自动增量ID.我以这种方式找到的问题是URL是简单的可迭代的.因此,我们可以通过增加URL中的ID来创建一个简单的脚本并访问所有页面.也许是一个安全问题.
2) Using a <hash_id> => .com/object/c30204225d8311e185c3002219f52617
Run Code Online (Sandbox Code Playgroud)
"hash_id"应该是一些字母数字字符串值,例如使用uuid函数生成.这是一个好主意,因为它不可迭代.但生成"随机"唯一ID可能会导致一些问题.
3) Using a Slug => .com/object/some-slug-generated-with-the-object
Run Code Online (Sandbox Code Playgroud)
Django为模型提供了一个"slug"字段,它可用于识别URL中的对象.我在这种情况下发现的问题是slug可能会在时间上发生变化,从而产生损坏的URL.如果某些搜索引擎(如Google)已将此网址编入索引,则可能会将用户引导至"未找到"网页,我们的网页排名可能会降低.冻结弹头可以解决问题.我的意思是,仅在"添加"操作中保存slug,而不是在"Update"操作中保存.但是slu the现在可以代表旧的或不正确的东西.
所有选项都有优点和缺点.可能会使用它们的某些组合可以解决一些问题.你觉得怎么样?
我开发了一个PHP + PostGIS应用程序,我需要在某个地方托管它.任何人都可以推荐我一个虚拟邮件Postgres + PostGIS数据库的网站托管?我找到了一些主持应用程序的地方,但我想了解一下你的经历.非常感谢!