HVT*_*VT7 4 mongodb mongodb-query aggregation-framework
我有一份文件如下:
{
user: 'hvt07',
photos: [
{
link: 'http://link.to.com/image1.jpg',
isPrivate: true
},
{
link: 'http://link.to.com/image2.jpg',
isPrivate: false
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想得到所有照片:
isPrivate: false
Run Code Online (Sandbox Code Playgroud)
我使用以下查询:
db.collection_name.find({ photos:{ $elemMatch:{isPrivate: false} } }).pretty()
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
db.collection_name.find({'photos.isPrivate': true}).pretty()
Run Code Online (Sandbox Code Playgroud)
但是两者都返回数组中的所有元素,即使是那些设置为:
isPrivate: true
Run Code Online (Sandbox Code Playgroud)
请建议.
聚合是解决方案.
您需要photos使用$unwind运算符解构数组 .接下来使用$match选择文件在哪里isPrivate: false.该$group您可以通过重新组合您的文件_id和重建您photos使用数组$push运算符
db.collection_name.aggregate(
[
{$unwind: "$photos"},
{$match: {"photos.isPrivate": false}},
{$group: {"_id": {"id": "$_id", "user": "$user"}, photos: {$push: "$photos"}}}
{$project: {"_id": "$_id.id", "user": "$_id.user", "photos": 1, "_id": 0 }}
]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |