2017-07-27 172 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( )