0

使用 MongoDB,我们有两种方法可以对我们的存储库进行请求:

  1. 查询方法:findOneByUsernameAndType...
  2. Querydsl 方法允许我们传递条件并检索结果列表。

当我做 afindOneBy时,我检索与请求对应的第一个文档,即使有很多结果。

但是我有一个复杂的查询,所以我不能使用这个方法,因为它的名字太长了,我不能做我想做的事。

所以我想对查询 dsl 做同样的事情:

foo = repository.findOne(criteria);

使用标准具有 3 个属性的 DTO。

问题是如果有超过 1 个结果,这会findOne抛出异常而不是返回第一个结果。

如何使用 Querydsl 做到这一点?

4

1 回答 1

0

如果我不理解您的问题,您希望返回多个值以下代码块将帮助您

文档:http ://www.querydsl.com/static/querydsl/2.1.0/reference/html/ch02s07.html

JAVA

QMember qMember = new QMember("member");
MongodbQuery<Member> query = new MongodbQuery<Member>(morphia, datastore, qMember);
List<Member> members= query
    .where(qMember.Name.eq("furkaan"))
    .list();

.NET (C#)

mongodb.driver dll 2.4版

.Find() 扩展方法

命名空间:MongoDB.Driver.IMongoCollectionExtensions

public static Main(){
    list<Member> members= Filter<Member>(x=>x.Name.Contains("furkaan","member"));
}

public static List<T> Filter<T>(Expression<Func<T, bool>> expressionFunc, string collectionName = null)
{
    //var database = getDatabase()  todo get database
    List<T> results = new List<T>();
    var collection = database.GetCollection<T>(collectionName);
    if (collection != null)
    {
        results = collection.Find(expressionFunc).ToList();
    }
    return results;
}
于 2017-05-24T09:48:37.570 回答