java–spring-data-mongodb:findAll(),包含输入文档列表和嵌入式DBRef文档的搜索参数

java–spring-data-mongodb:findAll(),包含输入文档列表和嵌入式DBRef文档的搜索参数,第1张

概述我使用spring-data-mongo并尝试使用params访问dbref对象.我的项目看起来像这样:我的模型如下:一世.第一份文件是“汽车”@Document('cars') class CarDocument { @Id private String id; private String name; private String

我使用spring-data-mongo并尝试使用params访问dbref对象.
我的项目看起来像这样:

我的模型如下:

一世.第一份文件是“汽车”

@document("cars")class Cardocument {   @ID   private String ID;   private String name;   private String madeInCountry;   private String model;   private String madeInYear;}

II.第二个文件是“工具”

document("tools")class Tooldocument {   @ID   private String ID;   private String name;   private String madeInCountry;   private String madeInYear;   private List

III.第三个是嵌入式模型“UsedIn”(ii.)
第三个嵌入式模型表示在制造厂中用于制造汽车的工具的位置.

class UsedIn {   @DBRef   private Cardocument car;   private DateTime usedDate;   private String usedByUsername;}

我的DAO如下:

public interface CarDAO extends MongoRepository

现在我需要列出特定汽车中使用的所有“工具”.

一个.汽车制造时在国内:“德国”和
湾工具制造国家:“德国”

我看到我们无法直接在DBRef文档上应用搜索.
喜欢 :

String madeInCountry = "germany";toolDAO.findByMadeInCountryAndUsedInCarMadeInCountry(madeInCountry,madeInCountry);

我收到此错误:

"InvalID path reference car.madeInCountry! Associations can only be pointed to directly or via their ID property!"

怎么样?

我需要做两个DAO呼叫吗?

一世.首先让所有带有madeInCountry的汽车都是德国的

String madeInCountry = "germany";carDAO.findByMadeInCountry(madeInCountry);

II. findTools由cardocuments和String列表组成.

我不知道,如何用Cardocuments和madeInCountry字符串列表调用这个dao?

我需要使用一些$lookup功能吗?

谢谢

最佳答案您可以尝试以下聚合.

将UsedIn类更新为以下.

 private Long carID; private Cardocument car; private Date usedDate; private String usedByUsername;

Mongo Shell查询:

db.tools.aggregate([{    "$match": {        "madeInCountry": "germany"    }},{    "$unwind": "$usedIn"},{    "$lookup": {        "from": "cars","localFIEld": "usedIn.carID","foreignFIEld": "_ID","as": "usedIn.car"    }},{    "$unwind": "$usedIn.car"},{    "$match": {        "usedIn.car.madeInCountry": "germany"    }},{    "$group": {        _ID: "$_ID",usedIns: {            "$push": "$usedIn"        }    }}])

Spring聚合代码:

 Criteria toolquery = Criteria.where("madeInCountry").in("germany"); MatchOperation toolMatchOperation = new MatchOperation(toolquery); LookupOperation lookupOperation = LookupOperation.newLookup().                from("cars").                localFIEld("usedIn.carID").                foreignFIEld("_ID").                as("usedIn.car"); Criteria carquery = Criteria.where("usedIn.car.madeInCountry").is("germany"); MatchOperation carMatchOperation = new MatchOperation(carquery); TypedAggregation

加载数据的方法.

汽车数据

public voID saveCar() {    carDao.deleteall();    Cardocument cardocument1 = new Cardocument();    cardocument1.setID(1L);    cardocument1.setname("audi");    cardocument1.setMadeInCountry("germany");    carDao.save(cardocument1);}

工具数据

public voID savetool() {    toolDao.deleteall();    Tooldocument tooldocument1 = new Tooldocument();    tooldocument1.setID(1L);    tooldocument1.setname("Wrench");    tooldocument1.setMadeInCountry("germany");    UsedIn usedIn1 = new UsedIn();    usedIn1.setCarID(1L);    usedIn1.setUsedByUsername("user");    usedIn1.setUsedDate(new Date());    List

更新:

回答有关访问DBRef的问题

ii. findTools by the List of cardocuments and String.

I dont kNow,how to call this dao with List of Cardocuments and
madeInCountry String ?

 public List

就像我在第一个评论中提到的那样,您需要的第二个调用是对嵌入式dbref的调用以及汽车文档列表值.查询将查找匹配项,并在找到工具文档的匹配项时返回所有汽车文档.这意味着您将获得德国制造的工具文件,其中至少使用了德国制造的文件.

分片更新($lookup equalivent)(从这里获取的想法MongoDB to Use Sharding with $lookup Aggregation Operator)

List
总结

以上是内存溢出为你收集整理的java – spring-data-mongodb:findAll(),包含输入文档列表和嵌入式DBRef文档的搜索参数全部内容,希望文章能够帮你解决java – spring-data-mongodb:findAll(),包含输入文档列表和嵌入式DBRef文档的搜索参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)