首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有uMongo的马达::总是没有

使用带有uMongo的马达::总是没有
EN

Stack Overflow用户
提问于 2020-04-06 21:39:05
回答 2查看 355关注 0票数 1

我正在努力弄清楚如何在监视器中使用uMongo,而且我遇到了一个问题。我无法让uMongo文档对象返回除None之外的任何其他内容,而且我确信这是显而易见的,我一直在忽略它。如果有人有任何建议或者看到一些我不知道的事情,请告诉我。

连接字符串被净化了,在我的代码中并不是这样的。

下面是我使用的测试文件:

代码语言:javascript
复制
import asyncio, pprint
from motor.motor_asyncio import AsyncIOMotorClient
from umongo import Document, Instance, fields

# plain motor connection
client = AsyncIOMotorClient('mongodb+srv://user:password@atlas.azure.mongodb.net')
db = client.my_database

# umongo motor connection
instance = Instance(db)

# umongo document object
@instance.register
class User(Document):
    nickname = fields.StringField()
    gender = fields.StringField()

    class Meta:
        collection = db.test


# plain motor query function
async def plain_motor_find_one():
    document = await db.test.find_one({'nickname': 'rook'})  # this works
    pprint.pprint(document)


# umongo motor query function
async def umongo_motor_find_one():
    document = await User.find_one({'nickname': 'rook'})  # this does not and returns None
    pprint(document)

# grab event loop
loop = asyncio.get_event_loop()

# make our calls
loop.run_until_complete(plain_motor_find_one())
loop.run_until_complete(umongo_motor_find_one())

下面是我的database.test集合中的对象的样子:

代码语言:javascript
复制
{
    "_id" : ObjectId("5e8b9c205ac19a8a91658f17"),
    "nickname" : "rook",
    "gender" : "male"
}

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2022-05-02 08:58:18

如果要使用电动机和异步,请按照以下代码操作:

代码语言:javascript
复制
import asyncio

from motor.motor_asyncio import AsyncIOMotorClient

from umongo import Document, fields
from umongo.frameworks import MotorAsyncIOInstance

client = AsyncIOMotorClient('mongodb://localhost:27017')
db = client.shop
instance = MotorAsyncIOInstance(db)


@instance.register
class User(Document):
    name = fields.StringField()

    class Meta:
        collection = db.user


async def plain_motor_find_one():
    document = await User.find_one({'foo': 'bar'}) # now all methods are awaitable
    print(document)


loop = asyncio.get_event_loop()
loop.run_until_complete(plain_motor_find_one())
票数 0
EN

Stack Overflow用户

发布于 2022-09-14 07:11:23

问题在于这一部分:

代码语言:javascript
复制
# umongo motor connection
instance = Instance(db)

umongo.Instace是一个抽象类,它用于实现,而不是直接使用。

您应该使用PymongoInstanceMotorAsyncIOInstance,它们分别是用于PymongoMotor驱动程序的Instance类的实现。

在这里,当您想要使用MotorAsyncIOInstance驱动程序时,应该使用Motor

而不是上面的片段,使用下面的代码片段,它将完成任务。

代码语言:javascript
复制
from umongo.frameworks import MotorAsyncIOInstance
instance = MotorAsyncIOInstance(db)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61069382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档