你有使用Django的MongoEngine或MongoKit吗?你更倾向哪个?
背景:
我正在开发一个新站点并且具有正常 Django开发的经验,但是对于我将使用的数据类型,MongoDB将比SQL数据库更适合.
我正在使用Python 2.7并且可以在我的主机上编译/安装任何东西,所以这不是问题.
我有一个关于使用mongodb和mongoengine进行分页的问题.我有一张桌子,将来会有数百万张唱片.而我正在做这样的分页.
我不确定这是正确的做法
list = Books.objects.all()
paginator = DiggPaginator(list, 20, body = 10, tail = 2)
Run Code Online (Sandbox Code Playgroud)
在这里,我打开整个表格,然后进行分页,我们再次进行下一页代码运行并带来第二页或任何页面.
这是正确的方法还是有更好的方法来做到这一点.
我有一组定义了多键索引的文档.但是,对于43K文档,查询的性能相当差.这个查询的〜215ms被认为是差的吗?如果nscanned是43902(等于集合中的文档总数),我是否正确定义了索引?
文献:
{
"_id": {
"$oid": "50f7c95b31e4920008dc75dc"
},
"bank_accounts": [
{
"bank_id": {
"$oid": "50f7c95a31e4920009b5fc5d"
},
"account_id": [
"ff39089358c1e7bcb880d093e70eafdd",
"adaec507c755d6e6cf2984a5a897f1e2"
]
}
],
"created_date": "2013,01,17,09,50,19,274089",
}
Run Code Online (Sandbox Code Playgroud)
指数:
{ "bank_accounts.bank_id" : 1 , "bank_accounts.account_id" : 1}
Run Code Online (Sandbox Code Playgroud)
查询:
db.visitor.find({ "bank_accounts.account_id" : "ff39089358c1e7bcb880d093e70eafdd" , "bank_accounts.bank_id" : ObjectId("50f7c95a31e4920009b5fc5d")}).explain()
Run Code Online (Sandbox Code Playgroud)
说明:
{
"cursor" : "BtreeCursor bank_accounts.bank_id_1_bank_accounts.account_id_1",
"isMultiKey" : true,
"n" : 1,
"nscannedObjects" : 43902,
"nscanned" : 43902,
"nscannedObjectsAllPlans" : 43902,
"nscannedAllPlans" : 43902,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0, …Run Code Online (Sandbox Code Playgroud) 我想创建一个表,其中两个字段组合在一起形成一个索引字段.我创建表的Python代码如下.我想要做的是使组合字段course_name和group_name唯一,以便没有两个具有相同course_name和group_name可以创建的组.有人可以帮我这个吗?
class SocialGroup(Document):
timestamp = DateTimeField(default=datetime.now)
course_name = StringField()
group_name = StringField(choices=[('A', 1), ('B', 1), ('C', 1),('D', 1), ('E', 1), ('F', 1), ('None',1)], default="None")
Run Code Online (Sandbox Code Playgroud) 在一个MongoEngine模型中,当我使用时,我正在使用参考字段
schedule = ReferenceField('Schedule',required=True)
Run Code Online (Sandbox Code Playgroud)
并尝试插入文档
#my_schedule being a 'Schedule' object that has been created and saved successfully
record.schedule = my_schedule
record.save()
Run Code Online (Sandbox Code Playgroud)
我明白了
ValidationError: ValidationError (Calling:None) (A ReferenceField only accepts DBRef or documents: ['schedule'])
Run Code Online (Sandbox Code Playgroud)
但是,如果我将字段定义更改为
schedule = ReferenceField(path.to.Schedule,required=True)
Run Code Online (Sandbox Code Playgroud)
(IE直接引用Schedule模型)
该文档可以成功保存.我怎样才能避免这个错误?
对计划模型的完全捍卫
class Schedule(Document):
uid = StringField(required=True)
start = DateTimeField(required=True)
end = DateTimeField(required=True)
days = ListField(required=True)
toc = StringField(required=False)
meta = {
'indexes':['uid']
}
Run Code Online (Sandbox Code Playgroud)
并呼吁
class Calling(Document):
"""
Calling Point
"""
schedule = ReferenceField('Schedule',required=True)
tiploc = StringField(required=True)
calling = ListField(StringField(required=True))
arrive = …Run Code Online (Sandbox Code Playgroud) 大家好,我有下一个环境python2.7.5:
flask==0.10.1
flask-wtf==0.8.4
jinja2==2.7
werkzeug==0.9.1
flask-mongoengine==0.7.0
mongoengine==0.8.2
pymongo==2.5.2
uwsgi==1.9.13
Run Code Online (Sandbox Code Playgroud)
并有下一个应用程序'app.py':
from flask import Flask
from flask.ext.mongoengine import Document, MongoEngine
from mongoengine import StringField
class Config(object):
DEBUG = True
MONGODB_HOST = ('mongodb://localhost:27017,localhost:27018/'
'test?replicaSet=rs0')
MONGODB_DB = True
app = Flask(__name__)
app.config.from_object(Config)
MongoEngine(app)
class Test(Document):
test = StringField(default='test')
meta = {
'allow_inheritance': False,
}
def __unicode__(self):
return self.test
Test(test='test1').save()
@app.route('/')
def hello_world():
return unicode(Test.objects.first())
if __name__ == '__main__':
app.run('0.0.0.0', 8080, True)
Run Code Online (Sandbox Code Playgroud)
我有下一个nginx配置:
server {
listen 80;
server_name localhost;
location / { …Run Code Online (Sandbox Code Playgroud) 假设我的Schema看起来像这样:
class User(Document):
username = StringField()
password = StringField()
category = StringField()
Run Code Online (Sandbox Code Playgroud)
想象一下,我们有这些现有的类别:"avengers", "justice-leaguers", "villains",我想执行一个"group by"查询,User.objects.all()以便我可以得到这样的东西:
[
[<User: IronMan object>, <User: Thor object>, <User: Hulk object>],
[<User: Superman object>,<User: Batman object>],
[<User: Ultron object>, <User: Joker object>, <User: LexLuthor object>]
]
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
{
"avengers": [<User: IronMan object>, <User: Thor object>, <User: Hulk object>],
"justice-leaguers": [<User: Superman object>,<User: Batman object>],
"villains": [<User: Ultron object>, <User: Joker object>, <User: LexLuthor object>]
}
Run Code Online (Sandbox Code Playgroud)
我查看了MongoEngine的文档,但还没有找到任何有用的信息.多谢你们!
我在MongoDB集合中有一系列文档,如下所示:
{ 'time' : '2016-03-28 12:12:00', 'value' : 90 },
{ 'time' : '2016-03-28 12:13:00', 'value' : 82 },
{ 'time' : '2016-03-28 12:14:00', 'value' : 75 },
{ 'time' : '2016-03-28 12:15:00', 'value' : 72 },
{ 'time' : '2016-03-28 12:16:00', 'value' : 81 },
{ 'time' : '2016-03-28 12:17:00', 'value' : 90 },
etc....
Run Code Online (Sandbox Code Playgroud)
任务是 - 垃圾保持值为80,查找值entering低于80且exiting高于80的所有时间
{ 'time' : '2016-03-28 12:14:00', 'result' : 'enter' },
{ 'time' : '2016-03-28 12:16:00', 'result' : 'exit' …Run Code Online (Sandbox Code Playgroud) 我在Django Rest Framework中创建可自定义的swagger模式时遇到问题.我已经阅读了文档页面,但没有找到关于如何在python中生成swagger注释的明确示例.
我知道在Django中使用ViewSets时很容易生成swagger/schema文档.但是,我只使用APIViews并希望编写自定义架构.我尝试过创建一个CoreAPI架构,但我不知道如何实现它.我附上了一些示例代码和一些屏幕截图.屏幕截图从我拥有的到我想要的.
示例代码:
urls.py
from django.conf.urls import url, include
from rest_framework.urlpatterns import format_suffix_patterns
from Views import SampleView as sv
from rest_framework_swagger.views import get_swagger_view
from rest_framework.documentation import include_docs_urls
from rest_framework.renderers import CoreJSONRenderer
from rest_framework.schemas import get_schema_view
schema_view enter code here= get_swagger_view(
title='Sample API')
urlpatterns = [
url(r'^sample/$', pv.SampleList.as_view()),
url(r'^sample/(?P<id>[a-f\d]{24})/$', sv.SampleDetail.as_view()),
url('^schema/$', schema_view),
]
urlpatterns = format_suffix_patterns(urlpatterns)
Run Code Online (Sandbox Code Playgroud)
views.py
from rest_framework.views import APIView
from Manager.SampleManager import SampleManager as sm
_sampleManager = sm()
class SampleList(APIView):
"""
get:
Return a list of all …Run Code Online (Sandbox Code Playgroud) core-api mongoengine python-3.x swagger django-rest-framework
mongoengine ×10
mongodb ×9
python ×5
django ×3
pymongo ×2
core-api ×1
database ×1
mlab ×1
pagination ×1
performance ×1
python-3.x ×1
swagger ×1
uwsgi ×1