mongoose 查询文档的时候能直接得到某个属性的集合吗?
发布于 7 年前 作者 ooyeah 3066 次浏览 来自 问答

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

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

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

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

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

@hewentaowx 看来还是要自己处理一下,谢谢了!

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

回到顶部