CNode

mongoose 查询文档的时候能直接得到某个属性的集合吗?

问答
Oooyeah发布于8 年前最后回复8 年前5 回复3660 浏览0 收藏

举个栗子 例如查询年龄是30岁的用户(_id, username, age)的用户名列表

User.find({age:30}, function(users){
	// 这里得到的只是user列表, 我想知道mongoose查询能不能直接得到 username列表?
	// 这样就不用我再新建一个数组遍历赋值了
})
查看回复

回复 (5)

A
abRev#1·8 年前

额 复杂点的 用聚合吧 const users = await User.aggregate([ { $match:{ age: 30.0 } }, { $group:{ _id: "", names: {$push: '$name'} } } ]) 取值时 users[0].names 就是你要的数组了

H
hewentaowx#2·8 年前

好久没用mongoose但是我好像记得是这样写的: User.find({age:30}, {username: 1, age: 1,xxx: 0}, function(users) {}) username: 1 是返回的结果包含 username xxx:0 是其他你不需要返回的参数 _id 是默认返回的

O
ooyeah#3·8 年前
引用 hewentaowx好久没用mongoose但是我好像记得是这样写的: User.find({age:30}, {username: 1, age: 1,xxx: 0}, function(users) {}) ...

@hewentaowx 额,好像你理解错我意思了,我是希望直接得到['小明','小红']这样的username列表,而不是得到 [ { _id:xx, username:小明 }, { _id:xx, username:小红 } ]

H
hewentaowx#4·8 年前

哦哦 抱歉没注意看,好像mongoose没有可以直接解决你问题的方案,其实也不是很复杂 用reduce 就可以解决了。 User.find({age:30}, {_id: 0, username: 1, age: 0,xxx: 0}, function(users) { users.reduce((r, c) => { return [ ...r, c.username ] }, []); })

参与回复
登录后即可参与回复。登录