我正在尝试设计一个基于包含元数据数组的文档的查询。
图书={ title : String,metaData : String }
为了找到所需的图书,我有另一个包含多个元数据术语的搜索字符串数组。数组的长度可以随存在的元数据搜索项的数量而变化。如何查询才能找到包含所有指定元数据搜索词的图书?
示例:
book1 -自然,树木,昆虫,雾,音乐book2 -音乐,艺术,体育
使用音乐、体育的元数据进行搜索将会产生book2。
怎样才能最有效地设计这个查询呢?我可以这样做并避免嵌套查询吗?任何帮助都将不胜感激。
发布于 2019-07-07 12:07:41
您可以使用$all运算符来完成此操作。
从文档中:
如果要查找同时包含“
”和“”元素的数组,而不考虑数组中的顺序或其他元素,请使用$all运算符:
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
发布于 2019-07-07 17:28:57
您可以使用$all来获取包含给定元数据字符串的所有文档。
尝试:
let given_metadata_array = ["music", "sports"];
db.book.find({
metadata : {$all : given_metadata_array}
})有关详细信息,请阅读有关$all official documentation的更多信息。
https://stackoverflow.com/questions/56919259
复制相似问题