具有两个集合和一个where子句的mongodb类联接查询

具有两个集合和一个where子句的mongodb类联接查询,mongodb,join,where,Mongodb,Join,Where,假设数据库中有以下集合: db.documents.insert([{'name': 'A'}, {'name': 'B'}, {'name': 'C'}]) db.fragments.insert([{'value:': 'A1', doc_name: 'A'}, {'value:': 'A2', doc_name: 'A'}, {'value:': 'B1', doc_name: 'B'}, {'value:': 'B2', doc_name: 'B

假设数据库中有以下集合:

db.documents.insert([{'name': 'A'}, {'name': 'B'}, {'name': 'C'}])
db.fragments.insert([{'value:': 'A1', doc_name: 'A'}, {'value:': 'A2', doc_name: 'A'},
                     {'value:': 'B1', doc_name: 'B'}, {'value:': 'B2', doc_name: 'B'},
                     {'value:': 'C1', doc_name: 'C'}, {'value:': 'C2', doc_name: 'C'}])
其中,
documents
collection存储文档的名称(以及本例中省略的其他内容),
fragments
collections通过
doc\u name
引用与片段相关的文档

现在,如果我只想考虑一个文档子集

> db.documents.find().limit(2)
{ "_id" : ObjectId("52d1a3bf49da25160ad6f076"), "name" : "A" }
{ "_id" : ObjectId("52d1a3bf49da25160ad6f077"), "name" : "B" }
那么,我如何才能看到与这些选定文档关联的文档片段,以便

{ "_id" : ObjectId("52d1a3bf49da25160ad6f079"), "value:" : "A1", "doc_name" : "A" }
{ "_id" : ObjectId("52d1a3bf49da25160ad6f07a"), "value:" : "A2", "doc_name" : "A" }
{ "_id" : ObjectId("52d1a3bf49da25160ad6f07b"), "value:" : "B1", "doc_name" : "B" }
{ "_id" : ObjectId("52d1a3bf49da25160ad6f07c"), "value:" : "B2", "doc_name" : "B" }

作为一种解决方案,我认为应该将文档名存储在一个数组中,类似于
var docnames=???
这样

> docnames
[ "A", "B" ]
然后尝试在where子句中使用这个数组,比如

> db.fragments.find({$where: function(x) { return (this.doc_name in docnames)}})
error: {
        "$err" : "ReferenceError: docnames is not defined near 'c_name in docnames)}' ",
        "code" : 16722
}
但由于我对mongodb非常陌生,所以我很难理解它。我相信这也可以作为一个班轮

db.fragments.find( { 'doc_name': { $in : ['A' , 'B'] } } ); 
mongo
中执行以下命令:

var f = db.documents.find().limit(2) , n = [];
for (var i = 0; i < f.length(); i++) n.push(f[i]['name']);
db.fragments.find( { 'doc_name': { $in : n } } ); 
var f=db.documents.find().limit(2),n=[]; 对于(vari=0;i
mongo
中执行以下命令:

var f = db.documents.find().limit(2) , n = [];
for (var i = 0; i < f.length(); i++) n.push(f[i]['name']);
db.fragments.find( { 'doc_name': { $in : n } } ); 
var f=db.documents.find().limit(2),n=[]; 对于(vari=0;i好的,如果我有
var docnames=['A','B']
然后执行
db.fragments.find({doc\u name:{$in:docnames}})
。但是如何从第一个查询中获取
docnames
数组呢?我拥有的最接近的东西是
>db.documents.find({},{'name':1','u id':0})。limit(2)
,它给出了
{'name:“A”}{'name:“B”}
好的,如果我有
var docnames=['A','B']
,然后执行
db.fragments.find({docu name:{$in:docnames})
。但是如何从第一个查询中获取
docnames
数组呢?我拥有的最接近的东西是
>db.documents.find({},{name':1,{u id':0})。limit(2)
,它给出了
{name:“A”}{name:“B”}