Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中的两个查询之间传递变量?_Mongodb_Database_Nosql - Fatal编程技术网

如何在MongoDB中的两个查询之间传递变量?

如何在MongoDB中的两个查询之间传递变量?,mongodb,database,nosql,Mongodb,Database,Nosql,我想将一个集合的查询结果放入一个变量中,并将其用作另一个集合中查询的输入。查询如下所示: 问题1: var ID=db.User.findOne({Name:"Ivan"}, {ID: 1}); db.Artists.find({"Listeners.ID":ID}); 问题2: var Friends=db.Users.find({Friends:x}); //Users.Friends is an array of interger ident

我想将一个集合的查询结果放入一个变量中,并将其用作另一个集合中查询的输入。查询如下所示:

问题1:

var ID=db.User.findOne({Name:"Ivan"}, {ID: 1});
db.Artists.find({"Listeners.ID":ID});
问题2:

     var Friends=db.Users.find({Friends:x}); 
                 //Users.Friends is an array of interger identifier for User
     db. Artists.find({"Listeners.ID":{$in:Friends}});

但它们都不起作用。如何编写正确的查询?

查询
db.User.findOne({Name:Ivan},{ID:1})不返回单个值,它返回文档,缩减为您请求的字段。您得到的是一个对象,有两个字段:
\u id
(因为您没有明确排除它)和
id
(当它存在于文档中时)。您的
var ID
如下所示:

{
    _id:ObjectId(<long hex string>),
    ID:<value>
}

关于第二个查询:当您使用
find
而不是
findOne
时,您会得到一个cursor对象,然后可以使用
cursor.next()
cursor.toArray()

查询
db.User.findOne({Name:“Ivan”},{ID:1})不返回单个值,它返回文档,缩减为您请求的字段。您得到的是一个对象,有两个字段:
\u id
(因为您没有明确排除它)和
id
(当它存在于文档中时)。您的
var ID
如下所示:

{
    _id:ObjectId(<long hex string>),
    ID:<value>
}


关于您的第二个查询:当您使用
find
而不是
findOne
时,您会得到一个游标对象,然后可以使用
cursor.next()
cursor.toArray()

来检索单个文档,这看起来非常类似于。你不可能期望有人回答,这样你就可以用它来提供你自己的答案,是吗?或者您在同一个团队中,不知道同事们的问题。提示:$in需要一个ID列表,并且
find()
返回一个游标对象。我不知道为什么这样一个未经研究的简单问题会被投票两次。只要在控制台中打印pout变量,就会告诉您为什么查询不起作用。第一个查询仍然不起作用,因为它的格式仍然不正确@Sammaye,我在查询2中只使用$in,其中变量Friends应该是一个id列表,正如我所想。投票决定以a结束,因为它确实是,尽管它没有提出全部问题。这看起来非常类似于。你不可能期望有人回答,这样你就可以用它来提供你自己的答案,是吗?或者您在同一个团队中,不知道同事们的问题。提示:$in需要一个ID列表,并且
find()
返回一个游标对象。我不知道为什么这样一个未经研究的简单问题会被投票两次。只要在控制台中打印pout变量,就会告诉您为什么查询不起作用。第一个查询仍然不起作用,因为它的格式仍然不正确@Sammaye,我在查询2中只使用$in,其中变量Friends应该是一个id列表,正如我所想。投票以a结束,因为它确实是,但它并没有问整个问题。那么,如果我将第一个查询更改为
db.User.findOne({Name:“Ivan”},{u id:0,id:1})
?@Ivan,那么你会得到一个只有一个字段的对象:
{id:}
。因此答案将与
db.Artists.find({Listeners.id::id})相同;?@Ivan是的,它不会改变任何东西。如果ID不是一个字段,而是一个ID数组,那会怎么样?例如,我将第一个查询更改为
varids=db.Artists.findOne({“Tags.Creater”:{$in:[x]},{u id:0,id:{$slice:1},id:1})
。我仍然可以使用
db.Artists.find({“Listeners.ID”:IDs.ID})
?如果我将第一个查询更改为
db.User.findOne({Name:“Ivan”},{u id:0,id:1})
?@Ivan,那么您将得到一个只有一个字段的对象:
{id:}
。因此答案将与
db.Artists.find({“Listeners.id”:id.id})相同?@Ivan是的,它不会改变任何东西。如果ID不是一个字段,而是一个ID数组,那会怎么样?例如,我将第一个查询更改为
varids=db.Artists.findOne({“Tags.Creater”:{$in:[x]},{u id:0,id:{$slice:1},id:1})
。我仍然可以使用
db.Artists.find({“Listeners.ID”:IDs.ID})