将mongo db查询减少为纯数组

时间:2018-04-05 14:50:39

标签: javascript arrays mongodb mongodb-query aggregation-framework

当我运行db.abhishek.em.find({})时,我有

{ "_id" : ObjectId("5ac62d35b075e574b3e7eeaa"), "name" : "first", "employed" : true }
{ "_id" : ObjectId("5ac62d3fb075e574b3e7eeab"), "name" : "second", "employed" : true }
{ "_id" : ObjectId("5ac62d4eb075e574b3e7eeac"), "name" : "third", "employed" : false }

我想通过添加或链接某些东西来查找函数,将此结果减少为像这样的简单对象ID数组,类似于 db.a.b.find({employ:true})。somefunction()可以返回下面的数组 我想在更大的查询中使用嵌套了$ in的命令来实现某种关系查询

[
ObjectId("5ac62d35b075e574b3e7eeaa"),
ObjectId("5ac62d3fb075e574b3e7eeab")
]

----------------- EDIT ---------------------- < / EM>

对于一个示例案例,我希望通过运行

来雇佣员工
db.abhishek.another.find({id:{$in:db.abhishek.em.find({employed:true},{_id:1}).toArray()}})

或类似于此命令的内容无法正常工作

db.a.another集合是

{ "_id" : ObjectId("5ac63de1b075e574b3e7eead"), "id" : ObjectId("5ac62d35b075e574b3e7eeaa"), "name" : "Lets say person 1" }
{ "_id" : ObjectId("5ac63df7b075e574b3e7eeae"), "id" : ObjectId("5ac62d3fb075e574b3e7eeab"), "name" : "Lets say person 2" }
{ "_id" : ObjectId("5ac63e06b075e574b3e7eeaf"), "id" : ObjectId("5ac62d4eb075e574b3e7eeac"), "name" : "Lets say person 3" }

----------------- EDIT ---------------------- < / EM> 解决了,请看下面的答案

2 个答案:

答案 0 :(得分:2)

使用MongoDB仅提供模型中的那些字段。在MongoDB术语中,这称为Projection。有一个MongoDB方法.project()可以链接到您的查询,如下所示:

db.abhishek.em.find({}).project({});

应该这样做。如果要明确排除字段,请执行以下操作:

db.abhishek.em.find({}).project({name:0, employed:0});

然后,最后,以数组形式获取输出:

db.abhishek.em.find({}).project({name:0, employed:0}).toArray();

参考此处:

https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/

答案 1 :(得分:0)

感谢大家提供前进的指示和建议, 我能够使用以下

成功地进行某种基于关系的查询
db.abhishek.another.find({id:{$in:db.abhishek.em.find({employed:true},{_id:1}).map(function(e) {return e._id})}},{name:1,_id:0})

它将此作为输出

{ "name" : "Lets say person 1" }
{ "name" : "Lets say person 2" }

此查询从em集合中获取所有记录,其中使用的set为true,形成其数组,然后将其传递给$ in运算符,以查询“另一个”集合以提供输出

toArray方法,用于转换嵌套在数组中的对象,因此在运算符

中失败

感谢@veeram讲述选择字段