2014-10-17 85 views
0

在Mongoose中可能執行查詢,其中兩個搜索參數是ObjectIds(一個是ref)嗎?Mongoose查詢使用多個ObjectIds(與'ref')

例如,假設下面的模式:

var ObjectId = mongoose.Schema.ObjectId; 

var fooSchema = new mongoose.Schema({ 
    ... 
}); 

schemas.Foo = mongoose.model("Foo", fooSchema, "foo"); 

var barSchema = new mongoose.Schema({ 

    fooId : { type: ObjectId, ref: "Foo" }, 
    ... 
}); 

schemas.Bar = mongoose.model("Bar", barSchema, "bar"); 

我希望這個工作:

 schemas.Bar.find({ 

      _id  : mongoose.Types.ObjectId(req.params.barId), 
      fooId  : mongoose.Types.ObjectId(req.params.fooId) 

      }, 
      function(err, result) 
      { 
      ... 
      } 
     ); 

但它返回一個空集。奇怪的是,如果我刪除其中一個或另一個標準,它的工作原理。

 schemas.Bar.find({ 

      _id  : mongoose.Types.ObjectId(req.params.barId) 

      }, ...); 

或...

 schemas.Bar.find({ 

      fooId   : mongoose.Types.ObjectId(req.params.fooId) 

      }, ...); 

我在做什麼錯在這裏?我可以在數據庫中看到原始數據,但如果我在同一個查找中同時使用兩個ObjectId,查詢總是空的。

非常感謝

回答

1

那麼該死的,我只是解決了它在我盯着屏幕的幾個小時後。

當你插入一個Bar文檔時,你必須明確地告訴Mongoose所討論的ref值是一個ObjectId,即使該值來自Foo實例,其中_id被定義爲ObjectId!去圖..我猜Mongoose強制它的字符串,否則?

(new schemas.Bar({ 

     fooId : mongoose.Types.ObjectId(somePreviouslyRetrievedFoo._id), 
     ... 
    })).save(...) 

最後,它的工作原理!希望這有助於其他人跳上它!