当我运行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> 解决了,请看下面的答案
答案 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讲述选择字段