如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?
Posted
技术标签:
【中文标题】如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?【英文标题】:How can you find all documents that match the last element of an array field with a given query value in Mongoose? 【发布时间】:2020-05-02 16:01:48 【问题描述】:我有一个类似于以下结构的集合:
type Products
productid: String
owners: [String]
在我的查询中,我输入了一个值 user
。我需要检索与owners
中最后一个元素匹配的所有文档,希望使用 find。我试过Products.find( "$owners.-1": user )
到目前为止没有运气
有没有办法访问这个数组的最后一个元素?
【问题讨论】:
【参考方案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 );
【讨论】:
以上是关于如何在 Mongoose 中找到与数组字段的最后一个元素与给定查询值匹配的所有文档?的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose MongoDB 找到数组字段中数组长度最小的那个
如果未找到值,则使用 mongoose 将对象添加到数组中,否则更新字段
如何在 Mongoose 的嵌入式文档中检索数组的最后一个对象?