当前位置: 首页 > 知识库问答 >
问题:

如何在mongo spring boot中默认添加所有查询的默认条件

慕容嘉荣
2023-03-14

例如:

public Organization findOrgById(String id) {
    Query query = new Query();
    Criteria criteria = Criteria.where(Constants.ENTITY_ID).is(id)
            .and(Constants.DELETED).is(false);
    query.addCriteria(criteria);
    Organization res = mongoTemplate.findOne(query, Organization.class);
    return res;
}

是否有一种方法可以指定默认情况下总是添加deleted=false的所有条件,而不在代码本身中提及它?在Hibernate core中有一个注释@where,但它不能用于mongo文档。

共有1个答案

姬坚成
2023-03-14

我认为最好的方法是扩展MongoTemplate类,它将把Deleted=False条件添加到所有查找查询中。

下面是一个示例,说明如何使用一个用于执行findone查询的方法执行此操作:

public class ExtendedMongoTemplate extends MongoTemplate {

    private static final Document DELETED_CRITERIA_DOC = Criteria.where(Constants.DELETED).is(false)
        .getCriteriaObject();

    @Override
    protected <T> T doFindOne(
            String collectionName,
            Document query,
            Document fields,
            CursorPreparer preparer,
            Class<T> entityClass) {
        query.putAll(DELETED_CRITERIA_DOC);
        return super.doFindOne(collectionName, query, fields, preparer, entityClass);
    }
    ...
}

此方法在dofindone(Query Query,class<?>entityClass)(最后一个委托执行)方法中调用

protected <S, T> List<T> doFind(String collectionName, Document query, Document fields,
    Class<S> entityClass, CursorPreparer preparer);

protected <T> T doFindAndRemove(String collectionName, Document query, Document fields,
    Document sort, @Nullable Collation collation, Class<T> entityClass);

protected <T> T doFindAndModify(String collectionName, Document query, Document fields, Document sort,
    Class<T> entityClass, UpdateDefinition update, @Nullable FindAndModifyOptions options);

protected <T> T doFindAndReplace(String collectionName, Document mappedQuery, Document mappedFields,
    Document mappedSort, com.mongodb.client.model.Collation collation, Class<?> entityType,
    Document replacement, FindAndReplaceOptions options, Class<T> resultType);
 类似资料:
  • 问题内容: 我修改了一个表格,以这种方式向其中添加状态列 但是,对于创建的任何新ITEM,SQLite似乎都不会将N添加到该列中。语法是否错误,或者SQLite及其对默认值的支持是否存在任何问题。 我正在使用SQLite 3.6.22 问题答案: 对我来说看上去很好。 这是文档。 转储您的模式,并 在调用ALTER TABLE之后但在INSERT之前 验证 表结构是否存在。如果它在事务中,请 确保

  • 我创建了一个名为person的表,并使用liquibase变更集添加了一列“phone_number”。但现在我想为它添加一个默认值。但它不起作用,到目前为止,我已经尝试过: 和 和 有人能指出我哪里做错了,并且添加默认值会给以前添加的行增加值吗?

  • 我已运行此查询: 但它在列DATA\u DEFAULT中抛出一个错误: ORA-00932:不一致的数据类型:预期字符长 00932。00000-“不一致的数据类型:预期%s得到%s” 我怎样才能解决这个问题? 谢谢

  • 我在下面输入< code>JSON: 但是,输出 应类似,并且仅添加默认值: 这是我的规范: 我应该编辑<code>JOLT</code>规范,但我不明白(默认字段名、姓和状态如何工作。created可以添加为“created”:“@(3,ninjaed in time)”

  • 问题内容: 我正在寻找将列添加到默认值为0的MySQL数据库的语法 参考 问题答案: 尝试这个: 从链接到的文档中: 要在页面下方查找搜索语法,请执行以下操作: column_definition子句对ADD和CHANGE使用与CREATE TABLE相同的语法。请参见第12.1.17节“创建表语法”。 并从链接页面: 注意那里的DEFAULT这个词。

  • 我有一个apikey“令牌”,它必须在每个请求中作为查询参数提供。我如何设置翻新,以便始终在请求中包含此查询参数? 我当前将内标识作为默认参数提供: 但是由于我知道每个请求都需要相同的令牌,所以在我创建的每个请求函数中必须提供它作为默认参数,这感觉是多余的。我如何设置reverfit来用默认的查询参数修饰每个传出的请求? 这是我如何构建reverfit2实例的: 我认为在调用.build()之前,