如何在json数组mongoose中findjson对象

我有一个像这样的json对象的数组

[{firstname: "Tom", lastname: "Smith"}, {firstname: "Bob", lastname: "Smith"}] 

我想find该数组中的元素是否位于用户对象的字段名称也包含json对象的数组。

用户对象的一个​​例子是

 { "names": [{firstname: "joe", "lastname":"smith"}, {"firstname": "john", "lastname":"doe"}]} 

我想知道是否有任何这些名称对象包含在一个名为list2的随机长度的数组中

 [{firstname: "Tom", lastname: "Smith"}, {firstname: "Bob", lastname: "Smith"}, {firstname: "Joe", lastname: "Smith"}, {firstname: "Jordan", lastname: "Smith"}, {firstname: "John", lastname: "Smith"}, {firstname: "Bill", lastname: "Smith"}] 

我将如何创build一个mongoose查询来做到这一点?

谢谢!

假设你正在search的数组叫做“list”,如果你的对象总是包含这两个字段,并且只有那些字段,你可以用$in操作符

 { "names": { "$in": [ { "firstname": "Tom", "lastname": "Smith" }, { "firstname": "Bob", "lastname": "Smith" } ] } } 

如果这些对象可能会有所不同,并有其他领域,那么你可以用$or $elemMatch做到这$elemMatch

 { "$or": [ { "names": { "$elemMatch": { "firstname": "Tom", "lastname": "Smith" } }}, { "names": { "$elemMatch": { "firstname": "Bob", "lastname": "Smith" } }}, ] } 

如果要查找包含这两个对象的文档,请将$or运算符交换为$and

更新

你似乎在努力的是如何适用于你的程序。 当然,我们实际上从来没有像这样真正地编码查询,我们只是使用数据types来构造它们。 所以如果你的数据实际上符合$ in使用的条件,那么你的代码看起来像这样:

 // A list array that you likely actually retrieved from somewhere else // so you don't actuall define it here var list = [ { "firstname": "Tom", "lastname": "Smith" }, { "firstname": "Bob", "lastname": "Smith" } ]; // and the query "using" the array db.collection.find({ "names": { "$in": list } }) 

如果你需要使用另一种forms,那么“build筑”会变得更复杂一些:

 // A list array that you likely actually retrieved from somewhere else // so you don't actuall define it here var list = [ { "firstname": "Tom", "lastname": "Smith" }, { "firstname": "Bob", "lastname": "Smith" } ]; var query = { "$or": [ ] }; // process the list to add conditions list.forEach(function(item) { query["$or"].push({ "names": { "$elemMatch": item } }) }); // submit the constructed "query" object to find db.collection.find( query );