簡體   English   中英

2個集合中的mongodb查詢

[英]mongodb query in 2 collections

我像這樣在一個mongo db中分別在2個集合中定義了2個reconds

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']}),

有什么問題嗎? 謝謝!

另一種方法是:

> 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}));
});

我想你要:

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'})

返回完整的用戶記錄

也許您可以幫助解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM