如何在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 );