2017-07-27 170 views
0

我如何(通过Mongoose使用Node.js和MongoDB)在文档中搜索数组中的多个项目。Node.js - 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()但它只匹配整个阵列而不是它们的项目。所以这两个文件都不会返回。

回答

1

可以使用$所有的操作员用下面的查询:

{ 
    field1: 'abc', 
    field2: { 
     $all: ['def', 'jkl'] 
    } 
} 
+0

现在我知道为什么在$ =之前尝试$ all都不适合我。非常感谢@Steve – TamerB

+0

没问题。很高兴我能帮上忙。 –

1

当我遇到了同样的问题我的解决办法是做一些这样的:

{field1: 'abc', field2: 'def', field2:'jkl'}

这应该返回拥有的所有文件至少两个“高清”和“JKL”内field2和“ABC '在field1。 它看起来有点尴尬,可能有更好的方法来编写这个查询,但它确实有效并且完全有效。

0

要提取结果使用

你可以用$和加盟两种状态,在阵列中使用$在

搜索元素

db.collectionName.find({$ and:[{“field1”:“abc”},{“field2”:{$ in:[“def”,“jkl”]}]})。pretty( )