2012-08-25 58 views
1

我有這樣的模式:inArray貓鼬OBJECTID

var HuntGroupSchema = new Schema({ 
    name  : { type: String, required: true } 
    ,domain  : { type: ObjectId, required: true, ref: 'Domain' } 
    ,members : [{ type: ObjectId, ref: 'User'}] 
    ,email  : { type: String, unique: true} 
    ,pin  : { type: Number, default: 0} 
    ,extension : { type: Number, required: true} 
    ,timescheme : { type: ObjectId, ref: 'TimeScheme'} 
    ,ddi  : { type: String} 
}); 

,並有該數據

db.huntgroups.find() 
{ "_id" : ObjectId("50373487947749f0370000b0"), "ddi" : "01376xxxxxx", "domain" :  ObjectId("502807e9b9e737036d000018"), "email" : "[email protected]", "extension" : 3001,  "members" : [ ObjectId("50376767b5c99cd862000003") ], "name" : "test22", "pin" : 1234 } 

這個測試總是返回-1

// req.params['member'] === '50376767b5c99cd862000003' 
var member_id = mongoose.Types.ObjectId(req.params['member']); 

console.log($.inArray(member_id, huntgroup.members)); 

誰能告訴我爲什麼?

警告:我在貓鼬,jQuery和JavaScript的新手,所以要溫柔;)

回答

2

這是因爲$.inArray只檢查上的ObjectId對象引用相等。

爲了比較值ObectIds的而不是你需要做類似下面的使用equals運營商的ObjectId

huntgroup.members.forEach(function(member) { 
    if (member.equals(member_id)) { 
     // Yes, member_id is contained in the array 
    } 
}); 
+0

哦。我很困惑jQuery的定義: jQuery.inArray():搜索數組中的指定值並返回其索引(或-1,如果未找到)。 我認爲「數組內的值」的意思就是:) 我會試試你的方法。 謝謝! – jmls

+0

@ user1542325對於數字,布爾和字符串等基本類型,「inArray」會比較它們的值,但不會用於像ObjectId這樣的引用類型。 http://docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm – JohnnyHK