1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
from abc import ABC
from typing import List, Union
from beanie.odm.operators.find import BaseFindOperator
class BaseFindElementOperator(BaseFindOperator, ABC): ...
class Exists(BaseFindElementOperator):
"""
`$exists` query operator
Example:
```python
class Product(Document):
price: float
Exists(Product.price, True)
```
Will return query object like
```python
{"price": {"$exists": True}}
```
MongoDB doc:
<https://docs.mongodb.com/manual/reference/operator/query/exists/>
"""
def __init__(
self,
field,
value: bool = True,
):
self.field = field
self.value = value
@property
def query(self):
return {self.field: {"$exists": self.value}}
class Type(BaseFindElementOperator):
"""
`$type` query operator
Example:
```python
class Product(Document):
price: float
Type(Product.price, "decimal")
```
Will return query object like
```python
{"price": {"$type": "decimal"}}
```
MongoDB doc:
<https://docs.mongodb.com/manual/reference/operator/query/type/>
"""
def __init__(self, field, types: Union[List[str], str]):
self.field = field
self.types = types
@property
def query(self):
return {self.field: {"$type": self.types}}
|