假设我的收藏包含以下文件:
{“email”:“jim@abc.com”,“fb”:{“name”:{ “full”:“Jim Bent”}},“apps”:[“com.abc.1”,“com.abc.2”]}
{“email”:“john@abc.com”,“fb”:{“name”:{ “full”:“John Smith”}},“apps”:[“com.abc.1”,“com.abc.3”]}
我想编写一个查询并通过输出电子邮件的csv文件将其导出,fb.name.full按整个集合中的“apps”数组字段进行分组。 那就是:对于“com.abc.1”,它输出Jim Bent的电子邮件和John Smith以及电子邮件。 对于“com.abc.2”,它只输出Jim Bent,而对于“com.abc.3”,它只输出John Smith。
我已经研究了一下,但是mongoexport不允许复杂的查询,我也无法编写$ unwind函数。所以我正在撞墙。
任何建议表示赞赏。谢谢。
答案 0 :(得分:1)
您可以使用Javascript和mongo shell通过使用以下代码创建文件(例如:myquery.js
)来执行此操作:
printjson(
db.collection.aggregate([
{$unwind: '$apps'},
{$group: { _id: '$apps', info: { '$push': { email: '$email', name: '$fb.name.full'}}}},
{$project: {app: '$_id', info: 1, '_id': 0}}
]))
然后您可以从命令行执行查询:
mongo database myquery.js