【问题标题】:How can you find all documents that match the last element of an array field with a given query value in Mongoose?如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?
【发布时间】:2020-05-02 16:01:48
【问题描述】:

我有一个类似于以下结构的集合:

type Products {
       productid: String
       owners: [String]
}

在我的查询中,我输入了一个值 user。我需要检索与owners 中最后一个元素匹配的所有文档,希望使用 find。我试过Products.find({ "$owners.-1": user }) 到目前为止没有运气

有没有办法访问这个数组的最后一个元素?

【问题讨论】:

    标签: javascript database mongodb mongoose


    【解决方案1】:

    如果您的意思是只获取传入 user 值的文档是来自 Products 集合的 owners 数组中的最后一个元素,那么试试这个:

    var user = 'myname';    
    Products.find( { $expr: {$eq : [{ $arrayElemAt: [ '$owners', -1 ] }, user]} })
    

    收集数据:

    /* 1 */
    {
        "_id" : ObjectId("5e1f82b0d02e05b694b48b9d"),
        "productid" : "1",
        "owners" : [ 
            "others", 
            "myname"
        ]
    }
    
    /* 2 */
    {
        "_id" : ObjectId("5e1f84d3d02e05b694b4cbe0"),
        "productid" : "2",
        "owners" : [ 
            "others", 
            "myname", 
            "anothername"
        ]
    }
    
    /* 3 */
    {
        "_id" : ObjectId("5e1f84e2d02e05b694b4cee2"),
        "productid" : "3",
        "owners" : [ 
            "myname", 
            "anothername"
        ]
    }
    
    /* 4 */
    {
        "_id" : ObjectId("5e1f84ebd02e05b694b4d0d0"),
        "productid" : "4",
        "owners" : [ 
            "myname"
        ]
    }
    

    结果:

     /** Only "productid" : "1" & "productid" : "4" are returned */
    /* 1 */
    {
        "_id" : ObjectId("5e1f82b0d02e05b694b48b9d"),
        "productid" : "1",
        "owners" : [ 
            "others", 
            "myname"
        ]
    }
    
    /* 2 */
    {
        "_id" : ObjectId("5e1f84ebd02e05b694b4d0d0"),
        "productid" : "4",
        "owners" : [ 
            "myname"
        ]
    }
    

    【讨论】:

    • 非常感谢!这正是我所需要的,而且效果很好!!
    【解决方案2】:

    以下将为您提供所有者列表中的最后一个元素。

    db.Products.find( {}, { owners: { $slice: -1 } } );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 2019-05-06
      • 2020-07-31
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-31
      相关资源
      最近更新 更多