我如何(使用Node.js和MongoDB通过Mongoose)在文档中搜索数组中的许多项目。
例如,如果我有以下文件:
{
_id: 123, field1: 'abc', field2: ['def', 'ghi', 'jkl'],
_id: 456, filed1: 'abc', filed2: ['jkl', 'ghi', 'def']
}
架构称为schema1,如何使用
等查询执行搜索{field1: 'abc', field2: ['def', 'jkl']}
并获取两个文档(所有文档的field1 ='abc'和field2在查询中包含数组中的两个项目)?
我尝试使用schema1.find()
,但它只匹配整个数组而不是它们的项目。所以这两份文件都不会返回。
答案 0 :(得分:1)
当我遇到同样的问题时,我的解决方案是做一些事情:
{field1: 'abc', field2: 'def', field2:'jkl'}
这应该返回field2
中field1
和'abc'中至少同时包含'def'和'jkl'的所有文档。
它确实看起来有点尴尬,可能有更好的方法来编写这个查询,但它确实有效并且完全有效。
答案 1 :(得分:1)
您可以将$ all运算符与以下查询一起使用:
{
field1: 'abc',
field2: {
$all: ['def', 'jkl']
}
}
答案 2 :(得分:0)
要获取结果,请使用
你可以使用$和连接条件和搜索数组中的元素使用$ in
db.collectionName.find({$ and:[{“field1”:“abc”},{“field2”:{$ in:[“def”,“jkl”]}}]})。pretty( )