如果我有这个架构......
person = {
name : String,
favoriteFoods : Array
}
Run Code Online (Sandbox Code Playgroud)
... favoriteFoods数组中填充了字符串.我怎样才能找到所有使用猫鼬"寿司"作为他们最喜欢的食物的人?
我希望有类似的东西:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
Run Code Online (Sandbox Code Playgroud)
(我知道$contains在mongodb中没有,只是在了解解决方案之前解释我期望找到的内容)
我在mysql(5.7.12)中有下表:
class Story(db.Model):
sections_ids = Column(JSON, nullable=False, default=[])
Run Code Online (Sandbox Code Playgroud)
sections_ids是basicly整数[1,2,...,N]的列表。我需要获取sections_ids包含X的所有行。我尝试了以下操作:
stories = session.query(Story).filter(
X in Story.sections_ids
).all()
Run Code Online (Sandbox Code Playgroud)
但它抛出:
NotImplementedError: Operator 'contains' is not supported on this expression
Run Code Online (Sandbox Code Playgroud) 我将嵌套JSON存储为jsonb,但我不知道如何选择具有不确定值的嵌套json.
例如:
{
"facebook": {
"openid": "123456789",
"access_token": "6EFD26B0A868E3BB387E78851E42943F"
}
}
Run Code Online (Sandbox Code Playgroud)
我知道openid的值,但access_token是不确定的.
我尝试了以下但它引发了一个错误.
cls.query.filter(User.auth["facebook"]["openid"].astext == openid).first()
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为 的模型Item,其中包含一个 JSONB 字段data。其中一条记录存储了以下 JSON 对象:
{
"name": "hello",
"nested_object": {
"nested_name": "nested"
},
"nested_list": [
{
"nested_key": "one"
},
{
"nested_key": "two"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以通过对name字段进行过滤来找到此记录:
Session().query(Item).filter(Item.data["name"] == "hello")
Run Code Online (Sandbox Code Playgroud)
我可以通过同样过滤嵌套对象来找到此记录:
Session().query(Item).filter(Item.data[("nested_object","nested_name")] == "hello")
Run Code Online (Sandbox Code Playgroud)
但是,我正在努力通过过滤存储在嵌套列表中的项目的值来寻找找到此记录的方法。换句话说,如果用户提供了值“一”,我想找到上面的记录,并且我知道要nested_key在nested_list.
是否可以使用可用的 SQLAlchemy 过滤器来实现这一点?