2012-12-02 30 views
1

假設您的箱子中有物品。每個商品可能位於多個商品包裝盒中,因此每個商品都有一系列標識符以表示商品所在的包裝盒。查找數組中包含值的位置

childA = {... boxIds:['000001','000002','000003' ] ...}

在mongodb中,您可以說child.find({boxIds:'000002'})以獲取childA以及000002位於boxIds數組中的其他所有子節點。 這是我的貓鼬(CoffeeScript的)嘗試:

data = boxIds: box._id 
    Child.find data, (err, children) -> doSomething 

我總是得到一個空的結果雖然。我找不到問題,或者這種類型的查詢不支持貓鼬?

EDIT

Child = new mongoose.Schema 
    ... 
    boxIds: Array 
    ... 

box._id是正常mongodb的ID字符串

示例查詢MongoDB中:db.child.find({boxIds: '50bb5d10ba1e232401000002'})

結果:......., "boxIds" : [ "50bb5d10ba1e232401000002" ], .....

EDIT2

難道是_id不是一個字符串?

+0

貓鼬支持任何MongoDB可以支持的查詢。通常,像你這樣的空結果問題歸結爲模式中的類型與數據庫中的類型不匹配。你可以將你的模式和示例文檔添加到你的問題中嗎? – JohnnyHK

回答

3

問題是,box._id是一個ObjectId,但是數組字段Child包含字符串。

試試這個:

data = boxIds: box._id.toString() 
Child.find data, (err, children) -> doSomething 

另一種選擇是定義boxIds在架構一個字符串數組,然後貓鼬會爲你做了必要的鑄造:

Child = new mongoose.Schema 
    ... 
    boxIds: [String] 
    ... 
+0

是的,完全是,我決定採用其他方式來定義我的模式,如下所示:boxIds:[mongoose.Schema.Types.ObjectId]。鑄造也是自動完成的。謝謝! – Kuno

相關問題