问题标签 [mongoengine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1309 浏览

python - 使用内置的 Django 身份验证/用户模型和 Mongodb

从 sqlite 切换到 MongoDB,我遵循了Django MongoDB Engine的所有设置/配置设置。现在,当我通过从 view.py 中的 adduser 方法返回 HTTP 响应来添加用户时:

这是我得到的错误: DatabaseError at /adduser relation "auth_user" does not exist

自 MongoDB NoSQL 以来,这种关系自然不存在。是不支持身份验证系统还是 Mongo-engine 有更好的解决方案?也许我应该搬到 Postgre?(sqlite 无法处理同时用户,所以不是一个可行的选择)

我看到了这个问题,但那是一年前的事了,所以希望到那时事情已经发生了变化,因为今年 MongoDB 获得了很大的普及。

0 投票
9 回答
18814 浏览

python - 文档中的 Mongoengine creation_time 属性

我正在尝试为creation_time我的文档添加一个属性。下面是一个例子:

Django 模型为其DateTimeField对象(如add_now等)内置了参数,但 MongoEngine 不支持这一点。

我想知道最好的方法是否如下:

或者如果有更好,更好的方法。

0 投票
5 回答
15209 浏览

python - MongoDB 在 mongoengine 中使用 OR 子句

我正在使用 python 的 mongoengine 来查询 MongoDB,并且大部分时间都喜欢它,但是我遇到了高级查询的问题。

这是我的模型

我想查询所有ContentItem属于特定帐户的,并且要么由登录用户创建,要么是公开的。这是我写的查询

或者:

但这些似乎是 XOR where if eitherpublic或 the creatorbut not both。这是预期的吗?

我忽略了什么吗?我应该直接用 mongodb 而不是 mongoengine 来做这个吗?

我目前的解决方法是进行两个不同的查询并合并结果,但是随着内容项目的数量变大,结果需要很长时间才能回来,因为我需要先获取所有项目才能订购它们,从而丢失所有(django) 分页结果的好处。

0 投票
2 回答
927 浏览

django - 在安装 Django-nonrel 之前是否需要卸载 Django 1.3?

我想在我的 Django 项目中使用多个数据库。我目前安装了 Django 1.3,并且我的项目使用 PostgreSQL。我想添加一个使用 MongoDB 的应用程序。

据我了解(如果我错了,请纠正我),为了支持 MongoDB,我需要 Django-nonrel,它是一个为非关系数据库提供支持的分支。

那么我需要做些什么才能让 MongoEngine 在我的 Django 项目中运行,同时仍然支持我的项目中的 Postgre 东西?

我应该只运行 Django-nonrel 包中的 setup.py 吗?卸载官方的 Django 1.3?我在这里很困惑。

0 投票
2 回答
2098 浏览

python - 如何在 Mongoengine 中将元素添加到列表中

Mongoengine 可以通过追加元素将元素推送到列表

我想预先而不是附加,有没有办法?

同一问题的另一个替代问题..
我可以像这样按位置在列表中查询

有没有办法指定列表中的最后一个元素,比如 python 列表中的 -1 索引?

两个问题中的任何一个的答案都将解决我的问题。提前致谢。

0 投票
1 回答
2839 浏览

python - 在 Mongoengine 中使用键作为值

我在 django 中将 mongoengine 用于 mongodb。

但是.. mongoengine 字段(如 StringField)使我以我不想要的方式构建模式。我的意思是,它严格要求我在知道它会是什么之前预先写好键名。例如...

万一我不知道将什么键名放入数据库中...

[添加]

正如您在上面看到的,密钥彼此非常不同.. 只是假设“我不知道提前将哪个密钥名称作为密钥放入文档中

正如 dcrosta 回答的那样。我正在寻找一种在不提前指定字段的情况下使用 mongoengine 的方法。

[/添加]

我怎样才能通过 mongoengine 做同样的事情?请给我这样的架构设计

[添加]

我不知道 'xxxx' 将作为键名。

对不起..我是韩国人,所以我的英语很尴尬。请给我一些知识。感谢您阅读本文。

[/添加]

0 投票
3 回答
1749 浏览

django - 如何使用 MongoEngine 后端在 Django 中创建简单的 REST API?

Tastypie 看起来很有希望,但现在没有那么多了:

http://django-tastypie.readthedocs.org/en/latest/non_orm_data_sources.html

我应该使用 SimpleAPI 还是有更好的解决方案?

0 投票
1 回答
1785 浏览

python - mongoengine ReferenceField 的奇怪之处

这是一个令人费解的问题,甚至难以命名,更不用说描述了。我将从基本事实开始,然后给出可能相关的背景信息。

考虑两个 mongoengine 文档模型:

以下是在我们的生产服务器上不一致地生成:AttributeError

如果我将调试代码放在错误位置之前,则type(foo.bar)作为字符串进行评估会产生<class 'bson.dbref.DBRef'>. 显然 aDBRef没有bar_func属性,但为什么DBRef要返回 a 而不是 的实例Bar

进一步的调试代码显示以下条件在ReferenceField.__get__函数中失败mongoengine/fields.py

(pymongo.dbref.DBRef)实际上bson.dbref.DBRef,这似乎是一样的type(foo.bar)!为什么会isinstance失败?

这是事情变得非常奇怪的地方:

换句话说,与直接引用获得type(foo.bar)不同 。事实上,检查这两种类型会显示它们的功能和属性的不同内存位置。bson.dbref.DBRefbson.dbref.DBRef__dict__

注意:下面为了方便起见,我将调用返回的类型type(foo.bar) fooDBRef,以区别于bson.dbref.DBRef.

为了进一步调试,我修改了DBRef代码以添加一个元类,该元类在创建类型时检查系统模块DBRef,并将这些模块的 ID 列表存储在一个额外的类属性中DBRef。结果表明,创建时存在fooDBRef的模块集与创建裸类型时存在的模块集完全不同。bson.dbref.DBRef一个的所有模块 ID 都不同于另一个的所有模块 ID。

一些可能的相关因素:

  • 发生此错误的服务器在 Apache 下运行 mod_wsgi。
  • 服务器在 wsgi 下运行两个不同的 Django 站点(调用它们site_asite_b)。
  • Foo 定义在 中site_a.foo_app.models,Bar 定义在site_b.bar_app.models.
  • site_asettings.pysite_b.bar_appINSTALLED_APPS.
  • 产生错误的请求由site_a.
  • 创建时有site_b.*模块,但没有模块。反之亦然。sys.modulesfooDBRefsite_a.*bson.dbref.DBRef
  • 错误httpd reload有时会消失一段时间,然后在 0-10 次尝试后返回。

任何人都可以帮我找出导致fooDBRef不同的原因bson.dbref.DBRef吗?

0 投票
4 回答
18481 浏览

python - 如何用mongoengine“插入如果不存在则更新”?

我在 Django 中使用 mongoengine,
这是我的文档定义:

我想这样做:
给定 auser_id和 a point
如果没有具有 this 的文档,则使用 anduser_id创建一个user_idpoint保存它;
否则用user_idwith更新文档point
我可以用 mongoengine 在一个语句中做到这一点吗?

0 投票
2 回答
5385 浏览

python - 从 mongoengine 的文档中获取必填字段?

我希望能够获得我创建的文档所需的列表或某种类型的字段集。例如,这是我的文档:

^从这份文件中我应该收到:

作为必填字段的结果。这可能吗?如果是这样,我怎样才能达到预期的结果。

提前致谢!