0
假設我們有以下的數據庫集合:有兩個集合的MongoDB加入式查詢和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'},
{'value:': 'C1', doc_name: 'C'}, {'value:': 'C2', doc_name: 'C'}])
其中documents
集合存儲的文件(和其他的東西在這個例子中省略)的名字, fragments
集合通過doc_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的,所以我無法計算出來。我相信這也可以作爲一個單線程來完成。
確定,該作品,如果我有'變種docnames = [ 'A', 'B']'然後執行'db.fragments.find ({doc_name:{$ in:docnames}})'。但如何從第一個查詢中獲得'docnames'數組? – Timo
我最近的事情是db.documents.find({},{'name':1,'_id':0})。limit(2)',這給了 '{「name」:「A」 } {「name」:「B」}' – Timo
已更新的答案。 –