2个集合中的mongodb查询

时间:2014-03-04 11:02:26

标签: mongodb

我已经在一个mongo db中分别在2个集合中定义了2秒,就像这样

order:

{

    "_id" : ObjectId("53142f58c781abdd1d836fcd"),
    "number" : "order1",
    "user" : ObjectId("53159bd7d941aba0621073e3")
}

user

{

    "_id" : ObjectId("53159bd7d941aba0621073e3"),
    "name" : "user1",
    "gender" : "male"

}

当我在控制台中使用此命令时,它无法执行 db.orders.find({user:db.user ['_ id']}) db.orders.find({user:user ['_ id']}),

有什么不对吗?谢谢!

3 个答案:

答案 0 :(得分:1)

另一种方法是:

> var user = db.users.findOne({name: 'user1'}); 
> db.orders.find({user: user._id});

这种方式可以更灵活,特别是如果您想要为多个用户等返回订单。

发表评论:

  

谢谢,但实际上,我想搜索所有用户的所有订单,而不仅仅是一个用户。那我该怎么办?感谢

db.users.find().forEach(function(doc){
    printJson(db.orders.find({user: doc._id}));
});

答案 1 :(得分:0)

我想你想要:

db.order.find({'user':db.users.findOne({'name':'user1'})._id})

您需要做的就是在将输出插入查询之前进行查询并检查输出。

即。检查一下:

db.users.findOne({'name':'user1'})._id

有输出:

ObjectId("53159bd7d941aba0621073e3")

如果要运行较大的查询,则必须更改结构。请记住,Mongodb不会进行连接,因此您需要创建一个如下所示的用户文档:

user
{
 "name":"user1",
 "gender":"male",
 "orders":[
    {
     'number':'order1'
    }
 ]
}

然后您可以使用以下方式更新:

 db.user.update({'_id':ObjectId('blah')}, {'orders':{$push:{'number':'order2'}})

然后,这将启动订单跟踪。

Mongo将能够找到使用以下内容:

 db.user.find({'orders.numbers':'order2'})

返回完整的用户记录

答案 2 :(得分:0)

也许你可以帮助解决这个问题:

use orders
db.getCollection('order').find({},{'_id':1})
db.getCollection('user').find({},{'_id':1})