为什么 pymongo MongoDB 在 find_one() 中不返回精确值?

发布于 2025-01-11 10:27:59 字数 953 浏览 1 评论 0原文

我想从 pymongo DB 检索单个值“count”,但它不起作用。下图显示了如何设置数据输入。

mongodb 数据Entry

这是对我的数据库类的调用以使用 db.find_one()。

这里的代码:

    filters = {"email": session.get('email')}
    returns = {f'words.{today_s}.{self.length - 3}.count': 1}

    count_value = Database.find_one_return_one("users", filters, returns)

    print({f'words.{today_s}.{self.length - 3}.count':1})
    print(count_value)

@staticmethod
def find_one_return_one(collection: str, query: Dict, data: Dict) -> Dict:
    return Database.DATABASE[collection].find_one(query, data)

这会从正确的数据返回一个空的字典列表?我想要返回计数值。

这是投影查询: {words.20220302.0.count : 1}

这是返回的内容:

{'_id': ObjectId('621ee5065d08c44070140df0'), 'words': {'20220302': [{}, {}, {}, {}, {}, {}, {}]}}

出了什么问题或者是否有更好更快的方法来检索计数值?

I want to retrieve the single value "count "from pymongo DB but it is not working. The image below shows how the data entry is setup.

mongodb data entry

Here is the call to my Database class to use the db.find_one().

CODE HERE:

    filters = {"email": session.get('email')}
    returns = {f'words.{today_s}.{self.length - 3}.count': 1}

    count_value = Database.find_one_return_one("users", filters, returns)

    print({f'words.{today_s}.{self.length - 3}.count':1})
    print(count_value)

@staticmethod
def find_one_return_one(collection: str, query: Dict, data: Dict) -> Dict:
    return Database.DATABASE[collection].find_one(query, data)

This returns an empty list of dictionaries from the correct data? I want the count value returned.

This is the projection query: {words.20220302.0.count : 1}

This is what is returned:

{'_id': ObjectId('621ee5065d08c44070140df0'), 'words': {'20220302': [{}, {}, {}, {}, {}, {}, {}]}}

What is wrong or is there a better quicker way to retrieve the count value?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

つ可否回来 2025-01-18 10:27:59

可以使用以下查询投影来获得所需的结果。请注意,这适用于 MongoDB v5。

样本文件;与问题帖子中的类似:

{ _id: 1, words: { fld: [ { a: 1, b: 2 }, { a: 9, b: 100 } ] } }

预期结果是: { "_id" : 1, "words" : { "fld" : { "a" : 9 } } }

查询:

INDEX = 1    # this is the index of the array element
query = { }
projection = { 
    'words.fld': { 
        '$arrayElemAt': [ 
            { '$map': { 'input': '$words.fld', 'in': { 'a': '$this.a' } } }, 
            INDEX 
        ] 
    }
}

result = collection.find_one(query, projection)
print(result)

The following query projection can be used to get the desired result. Note this worked with MongoDB v5.

A sample document; similar to the one in the question post:

{ _id: 1, words: { fld: [ { a: 1, b: 2 }, { a: 9, b: 100 } ] } }

The expected result is: { "_id" : 1, "words" : { "fld" : { "a" : 9 } } }

The query:

INDEX = 1    # this is the index of the array element
query = { }
projection = { 
    'words.fld': { 
        '$arrayElemAt': [ 
            { '$map': { 'input': '$words.fld', 'in': { 'a': '$this.a' } } }, 
            INDEX 
        ] 
    }
}

result = collection.find_one(query, projection)
print(result)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文