2011-10-13 33 views
1

是否有任何簡單的方法可以在查詢中查找孤立的引用?我有一個有父引用的元素集合。在一些父母被刪除後,我想搜索指向它們的元素,即那些具有掛起引用的元素。在集合中查找orhphaned DBRef

我試過各種語法,但都沒有工作。

回答

0

不是,因爲mongodb是非關係型的,所以您需要自己找到所有關係。所有驅動程序通過請求任何引用來解決客戶端引用。在你的情況下,你需要通過所有類別,並嘗試加載父母的情況下,如果父母不存在 - 刪除孩子或做任何你想要的。 DBREF documentation

+0

這就是我做的。問題是如何找到他們的服務器端(在查詢中)。 –

+0

答案是你不能在查詢中做到這一點。 –

5

假設:

  • 父集合爲parentCollection
  • 孩子收集childCollection
  • 孩子引用通過childCollection.parentRefId父,

然後,你可以刪除所有通過向mongo發出以下命令來懸掛兒童物體:

db.childCollection.find().forEach(function(f) { 
    if(f.parentRefId && !db.parentCollection.findOne({ _id: f.parentRefId})) {   
     db.childCollection.remove({ parentRefId: f.parentRefId }); 
    } 
}); 
0
db.childCollection.find().forEach(function(f) { 
    if(f.refKey && db.parentCollection.find({ "_id": f.refKey.$id}).count() != 1) { 
     db.childCollection.remove({ _id: f._id }); 
    } 
}); 

這已經很平靜很適合我..