如何在嵌套字段值上过滤 mongo collection?

How do I filter a mongo collection on nested field value?

我有一个具有以下结构的流星 collection。这实际上来自 Meteor-files collection by ostrio.

{
 "_id" : "HsXoZ6bxkx5kMcJtm", 
"name" : "trees.jpg", 
"meta" : { "artist_id" : "QkmYdsZsMmRzqTg58" , "artist": "some name"}, 
"mime-type" : "audio/mp3", 
"userId" : "QkmYdsZsMmRzqTg58", 
"_collectionName" : "images" 
}

我定义一个发布

Meteor.publish('files.artist', function publishUserImages(){
   return Images.find({meta: {artist_id: this.userId}).cursor;
});

我想过滤 meta 键,return 所有带有 artist_id 的项目。 我当前的过滤器将仅获取 meta 具有确切值 {artist_id: "QkmYdsZsMmRzqTg58"} 的图像。过滤器不会 return 上面显示的项目,因为它 meta 值有一个额外的键 artist

如何构建合适的过滤器?

您可以使用 dot notation 查询嵌套字段

Meteor.publish('files.artist', function publishUserImages(){
   return Images.find({ 'meta.artist_id': this.userId}).cursor;
});

不同之处在于您的查询需要整个子文档匹配,而使用点表示法您只是检查一个子字段是否相等。