2014-02-04 4 views
1

У меня есть этот документ в моей коллекции:

{ 
    "_id" : ObjectId("52718433e18a711923000005"), 
    "owners" : [ 
     ObjectId("52718433e18a711923000004"), 
     ObjectId("52ed40dccc5bc50000000003"), 
     ObjectId("52ed4171abe2780000000003") 
    ] 
} 

У меня есть следующее заявление, где я пытаюсь удалить одно из значений в owners поле:

Business.update({_id:req.body._id}, {$pull:{"owners":req.body.userid}}, function(err){ 
    if(err){ 
     res.json(500, {message:"Could not remove user from admin list"}); 
    }else{ 
     res.json(200); 
    } 
}); 

Я знаю, что req.body._id и req.body.userid имеют действительные значения:

{ _id: '52718433e18a711923000005', 
    userid: '52ed4171abe2780000000003' } 

Другие операции, такие как поиск бизнеса по идентификатору и т. Д., Работают, поэтому это не проблема формата ObjectId. Что еще это может быть?

- Edit: вот мое определение (сокращенно) схемы:

var BusinessSchema = new Schema({ 
    business_name: {type: String, required: true}, 
    owners: {type: Array} 
}); 
+1

Можете ли вы обновить свой вопрос, включив определение своей схемы? – JohnnyHK

+0

Я добавил его к вопросу. –

ответ

1

Ваша текущая схема не предоставляет никакого указания Mongoose относительно типа данных, содержащегося в поле массива owners. Если вы хотите, чтобы Mongoose передал вашу строку ObjectID, вам необходимо указать информацию о типе в вашей схеме:

var BusinessSchema = new Schema({ 
    business_name: {type: String, required: true}, 
    owners: [{type: Schema.ObjectId}] 
}); 
+0

Спасибо. Хорошие указатели и хороший ответ. –

1

Это выглядит как преобразование в ObjectId требуется при попытке соответствовать значению тянуть. Но не искать. Так это работает:

var ObjectId = require('mongoose').Types.ObjectId; 

Business.update({_id:req.body._id}, {$pull:{"owners": new ObjectId(req.body.userid)}}, function(err){ 
    if(err){ 
     res.json(500, {message:"Could not remove user from admin list"}); 
    }else{ 
     res.json(200); 
    } 
}); 

- Edit: Так что, если я изменить схему от owners: {type: Array} к owners: [Schema.Types.ObjectId], я могу пропустить преобразование, и моя оригинальное заявление работа.

+1

Приведение 'String' в' ObjectId' требуется мне с помощью '[{type: Schema.Types.ObjectId, ref: 'owner'}]'. Были ли изменения в MongoDB/Mongoose с «14»? Также может быть, что 'ref'is мешает литой? –

Смежные вопросы