Mongoose如何对嵌套对象内的属性进行排序
排序失效原因
你的views字段是info对象的内嵌字段,不是文档的顶层字段。当前代码写的sort({ views: 1 })会尝试读取每个文档顶层的views属性做排序,而你的文档顶层根本没有这个字段,拿不到排序参考值,自然返回无序结果。
修复代码
MongoDB 操作内嵌字段需要用点语法写全字段路径,修改排序参数即可:
// 升序:views 从小到大,返回播放量最低的10条 const song = await Song.find({}).sort({ "info.views": 1 }).limit(10) // 降序:views 从大到小,返回播放量最高的10条,按需选用 // const song = await Song.find({}).sort({ "info.views": -1 }).limit(10)
补充说明
不止排序,只要是操作内嵌字段,不管是查询过滤、字段筛选还是更新,都要用点语法指定完整路径,比如要筛选专辑类型的歌曲,查询条件要写成:
Song.find({ "info.album": true })
注意点语法的字段路径要加引号,避免JS解析报错。
内容的提问来源于stack exchange,提问作者Arbër
相关产品推荐
相关产品推荐

