【问题标题】:Delete records from a collection of a specified DB从指定数据库的集合中删除记录
【发布时间】:2019-07-01 06:23:43
【问题描述】:

我使用 mongoDB 作为我的数据库,我正在开发 django 项目并使用 mongoengine 连接数据库。我的问题是如果我在settings.py 中的默认数据库是DB1 并且我想删除存在于DB2 中的集合的所有记录,那么我该怎么做。

settings.py

import mongoengine

mongoengine.connect(
    db= "DB1",
    host='localhost',
)

models.py

class Resources(Document):
    field1= fields.StringField(max_length=20)
    field2 = fields.StringField(max_length=70)
    field3 = fields.StringField(max_length=70)
    field4 = fields.DictField()

    meta = {'collection': 'resources', 'allow_inheritance': False, '_target_db': 'DB2'}

python 外壳

from .models import Resources
import mongoengine
mongoengine.connect('DB2', alias='ces')
ob = Resources()
ob.switch_db('ces')
ob.field1 = value
ob.field2 = value
ob.field3 = value
ob.save()

现在我在DB2 中收集了resources 并且它有一些记录,我尝试过Resources.objects.all().delete() 但它没有从DB2 中删除记录,而是从DB1 中删除记录,这是默认设置数据库。

【问题讨论】:

  • 您是否在 settings.py 文件中定义了 DB2?这很有趣,因为您在 settings.py 文件中只定义了 DB1,并且您对Resources 的所有操作都将发生在 DB1 上。
  • 不,我没有,如何在settings.py中定义DB2
  • Django 本身不支持 mongoDB,所以你不能使用内置的 django ORM。您是否使用第三方库进行 django mongodb 集成?
  • 在您的情况下,我猜您的 Django 模型中有具有相同名称(资源)的模型,当您使用 Resources.objects.all().delete() 时,您实际上是在调用 django 模型而不是mongoengine 文档。你能告诉我们你调用 delete() 方法的代码吗?
  • 是的,我正在使用 djongo 将 django 与 mongodb 连接起来。

标签: django pymongo mongoengine


【解决方案1】:

如果您的每个模型都绑定到 1 个(并且只有 1 个)数据库,您可以使用连接 aliasmeta = {'db_alias': 'your_connectio_alias'} (docs) 实现您想要的效果

请参阅此post 以获取示例

【讨论】:

    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2010-11-02
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多