基本上我想要
db.scoreFacts.find(
{"instrumentRanges.flute.minPitch": {$gte: 0, $lte:56}},
{"instrumentRanges.flute.minPitch": 1})
返回
{ "_id" : "Bach_Brandenburg5_Mov1.xml", "minPitch" : 50 }
但我得到了:
{ "_id" : "Bach_Brandenburg5_Mov1.xml", "instrumentRanges" : { "flute" : { "minPitch" : 50 } } }
基本上返回“minPitch”的路径,这不是我需要的。如何只用.find()(没有地图等)来实现我想要的输出?感谢。
答案 0 :(得分:1)
您无法使用标准.find()
查询执行此操作。如果您希望更改文档结构,请查看使用aggregate()
调用。然后,您可以使用投影来定义所需的结果字段。
例如:
db.scoreFacts.aggregate([
{ $match: {"instrumentRanges.flute.minPitch": {$gte: 0, $lte:56}} },
{ $project: {"minPitch": "$instrumentRanges.flute.minPitch"} }
]);
有关详细信息,请参阅relevant documentation。另外,请查看先决条件aggregation pipeline section。
注意:我自己没有测试过上面的查询,因此您可能需要稍微改变它以获得您想要的行为。