2016-11-21 2 views
0

Я хочу добавить значение в поддоку в mongoDB с помощью узла js. Схема является:Запрос SuDocuments в MongoDB с использованием Nodejs

var commentSchema = new Schema({ 
    author:String, 
    data:String, 
    postedAt:Date 
}); 

var likeSchema = new Schema({ 
    likedBy:{ 
     type:Array, 
     default:[""] 
    }, 
    numOfLikes:{ 
     type:Number, 
     default:0 
    } 
}); 

var picSchema = new Schema({ 
    url:String, 
    likes:[likeSchema], 
    comments:[commentSchema] 
}); 

var statusSchema = new Schema({ 
    data:String, 
    likes:[likeSchema], 
    comments:[commentSchema] 
}); 

var profileSchema = new Schema({ 
    username:String, 
    password:String, 
    DOB :Date, 
    sex: String, 
    Address:String, 
    pic:[picSchema], 
    Status:[statusSchema] 
}); 

Я хочу, чтобы один пользователь, чтобы добавить комментарий к картинке другого пользователя. Метод, который я использую прямо сейчас:

profile.update({"username":recepient,"pic._id":id},{$set:{"pic.comments":{"author":user,"data":comment,"postedAt":new Date()}}}},function(err,data){ 
        if (err){ 
         throw err; 
        }else{ 
         console.log(data); 
         res.status(200).json({status:"Added successfully"}); 
        } 

Здесь я получаю сообщение об ошибке, как: не может использовать часть ПИК pic.comments пройти.

Когда я использую оператор обновления, как:

profile.update({"username":recepient,"pic._id":id},{$set:{"comments":{"author":user,"data":comment,"postedAt":new Date()}}},function(err,data){ 
        if (err){ 
         throw err; 
        }else{ 
         console.log(data); 
         res.status(200).json({status:"Added successfully"}); 
        } 

Я не получаю сообщение об ошибке, но стоимость не получает добавлено.

Есть ли ошибка с оператором обновления или схемой?

ответ

0

Профиль имеет [Pic], Pic имеет [Комментарии], если вы хотите обновить Pic по "pic._id":id, то вы должны запросить для Pic модель, а не профиль. SubDocuments немного похожи на таблицы sql

pic.update({ // update Pic model, not Profile 
    "pic._id": id // removed "username":recepient as you already have picId 
    }, { 
    $set: { 
     "comments": { 
     "author": user, 
     "data":comment, 
     "postedAt":new Date() 
     } 
    } 
    }, function(err,data){ 
     if (err){ 
     throw err; 
     console.log(data); 
     res.status(200).json({status:"Added successfully"}); 
    } 
+0

Здесь база данных определяется в отдельном файле. Оттуда я экспортирую модуль profileSchema. Этот экспорт теперь используется и в других местах, например, для проверки подлинности паспорта. Поэтому, когда я пишу два экспортных оператора в файле базы данных, я получаю сообщение об ошибке в функции аутентификации паспорта. Потому что там «требуется» файл, откуда вызывается экспортированный модуль. Любая идея для этого? –

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