簡體   English   中英

在引用的文檔屬性中找到貓鼬

[英]Mongoose find in referenced document properties

我在查詢時會發瘋,以根據引用的文檔屬性找到匹配項。 我已經定義了這樣的架構:

mongoose.model('Route', new mongoose.Schema({
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
}));

mongoose.model('Match', new mongoose.Schema({
    route: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Route'
    }
}));

因此,當我在Match模型中搜索來自特定用戶的路線時,我會做類似的事情(也嘗試了不帶'_id'屬性的情況):

match.find({'route.user._id': '53a821577a24cbb86cd290d0'}, function(err, docs){});

但不幸的是,它沒有給我任何結果。 我也嘗試填充模型:

match.find({'route.user._id': '53a821577a24cbb86cd290d0'}).populate('route').exec(function(err, docs){});

但這並沒有什么不同。 我知道的解決方案(但不要認為它們是最干凈的):

  1. 查詢所有結果並進行遍歷,按代碼過濾
  2. 將嵌套文檔另存為路由模型內的數組(而不是引用)

有人建議嗎? 提前謝謝了!

相關問題(但未提供有效的解決方案):

我在查詢時會發瘋,以基於嵌套文檔屬性查找匹配項

您沒有嵌套的文檔。 您具有引用,這些引用只是指向駐留在其他集合中的文檔的ID。 這是您的基本斷開連接。 如果確實有嵌套文檔,則查詢將匹配。

您遇到“ mongodb不執行聯接”的情況。 每個MongoDB查詢都可以在一個且只有一個集合中搜索文檔。 您的“匹配”模型指向一個路由,而該路由指向一個用戶,但是該匹配並不直接了解該用戶,因此您的架構不支持您要執行的查詢。 您可以先搜索“ routes”集合,然后使用該查詢的結果來找到相應的“ match”文檔,或者可以取消規范化模式,並將routeId和userId直接存儲在匹配文檔中,在這種情況下,然后可以使用一個查詢。

根據您的問題標題,您似乎想要嵌套的文檔,但是您在貓鼬中將它們定義為引用,而不是真正的嵌套模式。 使用完全嵌套的架構並修復數據,然后您的查詢應開始匹配。

暫無
暫無

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

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