我正在使用Django和mongoengine。我有一个带有铭文列表的模型类,我希望获得该列表中具有id的文档。
classes = Classes.objects(inscriptions__contains=request.data['inscription']).all()
答案 0 :(得分:2)
也许我错过了一些东西......但似乎你应该使用.filter()
:
classes = Classes.objects.filter(inscriptions__contains=request.data['inscription'])
答案 1 :(得分:1)
这个答案是关于你对rnevius回答的评论
在Django ORM中,无论何时使用ORM进行数据库调用,如果使用QuerySet /数字,如果使用get(),它通常会返回模型的count()或对象等等,取决于您使用的函数,而不是查询集。
Queryset函数的结果可用于实现进一步的细化,例如,如果您想执行order()或仅收集distinct()等,Queryset是惰性的,这意味着它只会在实际上遇到数据库在分配时不使用。您可以找到有关他们的更多信息here。
由于没有返回查询集的函数无法实现这些功能。
花些时间深入了解Queryset文档,并提供示例。了解行为以提高应用程序效率非常有用。
答案 2 :(得分:0)
以下是查询ArrayField成员资格的一般说明:
对于Django ArrayField docs,import { NgModule, ApplicationRef, ErrorHandler } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { GlobalErrorHandler } from './error-handler';
import { ServicesModule } from './services';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
bootstrap: [AppComponent],
providers: [
{
provide: ErrorHandler,
useClass: GlobalErrorHandler
}
]
})
export class AppModule { }
运算符检查所提供的数组是否为ArrayField中值的子集。
因此,要过滤ArrayField是否包含值“ foo”,请传入一个长度为1的数组,其中包含要查找的值,如下所示:
__contains
您可以通过打印查询看到Django ORM生成# matches rows where myarrayfield is something like ['foo','bar']
Customer.objects.filter(myarrayfield__contains=['foo'])
postgres operator。
@>
如果您提供数组以外的内容,则会出现类似print Customer.objects.filter(myarrayfield__contains=['foo']).only('pk').query
>>> SELECT "website_customer"."id" FROM "website_customer" WHERE "website_customer"."myarrayfield_" @> ['foo']::varchar(100)[]
的神秘错误