MongoDB精准查询:如何获取指定用户的特定好友信息?
解决MongoDB数组匹配后返回单个元素的问题
针对你的需求,这里有两种实用的实现方式:
方法一:使用$elemMatch投影
在find方法的投影参数(第二个参数)中使用$elemMatch,可以只返回数组中符合条件的元素:
db.friends.find( { user: "649dbc85ff38d4464e5c0ee2" }, { friend: { $elemMatch: { name: "paco" } }, _id: 0 } )
返回结果示例:
{ "friend": [ { "id": "649dbc81ff38d4464e5c0edd", "name": "paco" } ] }
方法二:使用聚合管道(推荐,输出格式更精准)
通过聚合管道可以直接得到你想要的单个好友对象,无需额外处理:
db.friends.aggregate([ // 筛选目标用户的文档 { $match: { user: "649dbc85ff38d4464e5c0ee2" } }, // 将friend数组拆分为单个文档 { $unwind: "$friend" }, // 筛选出名字为paco的好友 { $match: { "friend.name": "paco" } }, // 把匹配到的friend对象作为根文档返回 { $replaceRoot: { newRoot: "$friend" } } ])
返回结果示例:
{ "id": "649dbc81ff38d4464e5c0edd", "name": "paco" }
另外需要注意:你之前写的friend: {"name":"paco"}是精确匹配整个对象,只有当数组元素完全等于{"name":"paco"}(不含id字段)时才会命中,正确的匹配方式应该是"friend.name": "paco",用来匹配数组元素中的name属性。
内容的提问来源于stack exchange,提问作者Hey L1nk
相关产品推荐
相关产品推荐

