Mongo SORT,具有属性列表中的特定条目

如何解决Mongo SORT,具有属性列表中的特定条目

我正在使用Mongo聚合/过滤器/排序,并使用JAVA进行限制。

我有以下模型对象。 CustomPOJO 是我的数据库集合。

@Document(collation = "CustomPOJO")
public class CustomPOJO {

    public List<keyvalueObject> valueList;
    public String attribute1;
    public String attribute2;
    public CustomObject attribute3;

}

public class CustomObject {
    public String attribute4;
    public String attribute5;
}

public class keyvalueObject {
    public String name;
    public String value;
}

现在我的数据库中有以下记录条目

记录1:

{
    "valueList": [{
        "name": "field1","value": "value1"
    },{
        "name": "field2","value": "value2"
    },{
        "name": "field3","value": "value3"
    }],"attribute1": "attribute1","attribute2": "attribute2","attribute3": {
        "attribute4": "attribute4","attribute5": "attribute5"
    }

}

记录2:

{
    "valueList": [{
        "name": "field1","value": "value4"
    },"value": "value5"
    },"value": "value6"
    }],"attribute1": "attribute11","attribute2": "attribute22","attribute3": {
        "attribute4": "attribute44","attribute5": "attribute55"
    }

}

我可以使用 sort(DESC,"attribute1") sort(DESC,"attribute3.attribute4") sort(DESC,"attribute2") 对所有字段进行排序>。但是我无法对 valueList 进行排序。我想根据 keyvalue 中特定的 valueList 条目进行排序。

例如,record1的valueList带有条目field1,因此数据库中的所有记录都应根据field1和其中的值进行排序。

通常,我想对列表属性内的字段进行排序。

任何帮助将不胜感激。

解决方法

您无法在适当位置使用数组的键值对进行排序。您可以使用聚合框架。

投影文档匹配键条目,然后对值进行排序,并从文档中删除其他字段。

类似

db.collection.aggregate(
[
  {"$set":{
    "sortdoc":{
      "$arrayElemAt":[
        {
          "$filter":{
            "input":"$valueList","cond":{"$eq":["$$this.name","field1"]}
          }
        },0]}
  }},{"$sort":{"sortdoc.value":-1}},{"$project":{"sortdoc":0}}
])

https://mongoplayground.net/p/gzLQm8m2wQW

您也可以像对待属性一样将valueList建模为对象。使用Document类或HashMap代替值列表,并使用sort(DESC,"document.field1")

@Document(collation = "CustomPOJO")
public class CustomPOJO {

  public Document document;
  public String attribute1;
  public String attribute2;
  public CustomObject attribute3;

}

文档

{
    "document": {
      "field1": "value1","field2": "value2"
    },"attribute1": "attribute1","attribute2": "attribute2","attribute3": {
      "attribute4": "attribute4","attribute5": "attribute5"
    }
}
,

您不能直接对Array内字段上的文档进行排序。通常,我要做的是function woocommerce_custom_add_to_cart_text( $add_to_cart_text,$product ) { // Get cart $cart = WC()->cart; // If cart is NOT empty if ( ! $cart->is_empty() ) { // Iterating though each cart items foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) { // Get product id in cart $_product_id = $cart_item['product_id']; // Compare if ( $product->get_id() == $_product_id ) { // Change text $add_to_cart_text = __( 'Already in cart','woocommerce' ); break; } } } return $add_to_cart_text; } add_filter( 'woocommerce_product_add_to_cart_text','woocommerce_custom_add_to_cart_text',10,2 ); 数组,然后执行排序。

也许这对您有帮助。

unwind

Mongo Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?