gpt4 book ai didi

javascript - 如何对 Mongoose 中的内部数组和匹配元素进行排序

转载 作者:行者123 更新时间:2023-11-30 12:25:15 25 4
gpt4 key购买 nike

所以我想在 mongoose 中做一个半复杂的查询。具体如下:

Event.findOne({ users: { $elemMatch: { user: someUserId, going: 1 }, sort: {createTime: -1} } }

基本上,我想做的是找到一个事件,该事件在其用户数组中有一个与 Id 匹配并且正在参加的用户。我在用户数组中有每个用户的多个用户记录,所以我想找到最近的一个,为此我想按 createTime 对用户数组进行排序。这是出现错误的地方,它只返回 undefined。当我不包含排序功能时它工作得很好,有什么办法可以包含它吗?

这是我的事件对象的样子:

{ 
_id: 1,
endTime: 1429060173865,
createTime: 1429051773902,
startTime: 1429052973865,
description: 'some desc',
creator: 2,
users:
[ { user: 1,
status: 1,
going: 1,
createTime: 1429051773749,
_id: 552d997d8e923847306e2c21 },
{ user: 1,
status: 1,
going: 1,
createTime: 1429051773922,
_id: 552d997d8e923847306e2c25 },
{ user: 1,
status: 9,
going: 0,
createTime: 1429051773942,
_id: 552d997d8e923847306e2c26 } ],
destroyed: 0 }

有什么办法可以完全在 mongoose 中进行这个查询吗?

最佳答案

作为查找的一部分,MongoDB 无法对文档的数组字段进行排序。您可以定义 Mongoose 的虚拟以按排序顺序返回数组。您还可以按排序顺序维护数组,如下所示:

> db.test.drop()
// note: not in order when inserted
> db.test.insert({ "_id" : 0, "users" : [
{ "user" : 1, "going" : 1, "created" : 22 },
{ "user" : 2, "going" : 1, "created" : 775 },
{ "user" : 1, "going" : 1, "created" : 6432 }
] })
// insert user to array and sort as part of update
> db.test.update({ "_id" : 0 },
{ "$push" : {
"users" : {
"$each" : [{ "user" : 2, "going" : 1, "created" : 5532 }],
"$sort" : { "created" : -1 }
}
} })
> > db.test.findOne()
{
"_id" : 0,
"users" : [
{ "user" : 1, "going" : 1, "created" : 6432 },
{ "user" : 2, "going" : 1, "created" : 5532 },
{ "user" : 2, "going" : 1, "created" : 775 },
{ "user" : 1, "going" : 1, "created" : 22 }
]
}

这样,当您执行查找查询时,匹配文档中的数组将已经按所需顺序排列。

关于javascript - 如何对 Mongoose 中的内部数组和匹配元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com