Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性
Posted
技术标签:
【中文标题】Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性【英文标题】:Mongoose - Cannot populate with sort on path notifications.from because it is a subproperty of a document array 【发布时间】:2018-08-24 12:52:09 【问题描述】:我有一个非常简单的 mongo 方案,我正在使用 mongoose 访问
我可以使用填充将用户名和名字映射到每个通知的发件人字段,问题是我似乎无法对日期字段进行任何排序
使用此代码,我得到一个错误
MongooseError:无法在路径通知上使用排序填充。来自 因为它是文档数组的子属性
是否有可能以不同的方式或更新的方式(深度填充、虚拟)来执行此操作?我在 Mongoose 5 上。
我宁愿不使用 vanilla javascript 之后对对象进行排序或创建单独的架构
var UserSchema = new Schema(
username: String,
firstname: String,
notifications: [
from: type: Schema.Types.ObjectId, ref: 'User',
date: Date,
desc: String
]
);
app.get('/notifications', function(req, res)
User.findOne( _id: req._id , 'notifications')
.populate(
path: 'notifications.from',
populate:
path: 'from',
model: 'User',
options: sort: 'notifications.date': -1
)
.exec(function(err, user)
if (err) console.log(err)
)
);
那个可能的重复是关于 Mongo 的近 2 年。我想知道在 Mongoose 中是否有更新或不同的方法来执行此操作,因为自 2016 年以来它已经发生了一些变化,具有更新的功能。
【问题讨论】:
How to sort sub-documents in the array field?的可能重复 那个可能的重复是关于 Mongo 的近 2 年历史。我想知道在 Mongoose 中是否有更新或不同的方法 - 因为它自 2016 年以来发生了一些变化,具有更新的功能。 【参考方案1】:来自 Mongoose V5.0.12 常见问题解答:http://mongoosejs.com/docs/faq.html#populate_sort_order
Q. 我正在填充一个嵌套属性,如下所示 代码:
新架构( arr:[ 孩子: ref:'OtherModel',类型:Schema.Types.ObjectId ] );
.populate( path: 'arr.child', options: sort: 'name' ) 不会按 arr.child.name 排序?
答。见this GitHub issue。这是一个已知问题,但 非常难以修复。
所以很遗憾,目前是不可能的,
实现此目的的一种方法是简单地使用javascript
的原生sort
在获取后对通知进行排序。
.exec(function(err, user)
if (err) console.log(err)
user.notifications.sort(function(a, b)
return new Date(b.date) - new Date(a.date);
);
)
【讨论】:
当人们使用分页延迟加载时,这不会是一个问题吗? 不,.sort()
仅对您从数据库中获得的结果进行排序,它与 sort: 'notifications.date': -1
所做的事情相同(没有 populate
),它不会更改数据.【参考方案2】:
It can be achievable using nesting populate like this -
eg - schema - donationHistory: campaignRequestId: [ref ids]
await user.populate(
path: 'donationHistory.campaignRequestId',
populate: [
path: 'campaignRequestId',
model: 'CampaignRequest',
options: sort: 'createdAt': -1 ,
],
...deepUserPopulation,
).execPopulate();
【讨论】:
以上是关于Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性
无法将带有点的键(键路径)添加到具有以下类型的 Mongoose 字段:Schema.Types.Mixed
Mongoose:CastError:在路径“_id”处为值“[object Object]”转换为 ObjectId 失败
节点,js - Mongoose - 无法保存地理多边形 - CastError: Cast to number failed