如何在嵌套字段值上过滤 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;
});
不同之处在于您的查询需要整个子文档匹配,而使用点表示法您只是检查一个子字段是否相等。
我有一个具有以下结构的流星 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;
});
不同之处在于您的查询需要整个子文档匹配,而使用点表示法您只是检查一个子字段是否相等。