在mongodb中为数组数组添加addToSet?

时间:2017-05-12 16:37:27

标签: php arrays mongodb

我在一个集合中有一个数组数组,我需要知道使用addToSet在该数组中添加一个项目。以下是我的文档结构

db.Timeline.insert({
Email : "sk.sagarkhan95@gmail.com",
BlogPosts :[{
Title : "Party Time",
Name : "Sagar Khan",
Description : "Some Description",
Date : new Date(),
Image : "users/sk.sagarkhan95@gmail.com/pictures/prof-pic.jpg",
Likes : ["hs@gmail.com"],
    Comments : [ {               **<-- Need to addToSet in this array**
    email : "hs@gmail.com",
    Name : "Harish Shinde",
    Image : "users/hs@gmail.com/pictures/prof-pic.jpg",
    comment : "Wow its soo true",
    Time : new Date()
     }]
}]
});

正如您所看到的,Timeline集合中有两个数组 即

  

BlogPosts-&GT;评论

我需要在评论数组中添加一个项目,这意味着我需要达到2级......我不知道如何做到这一点

我尝试过这样的事情,看看之前的解决方案,但没有运气

db.Timeline.update({Email :" sk.sagarkhan95@gmail.com"},{$addToSet:{ "BlogPosts.Comments":{"Title":"null"}}});

和这个

db.Timeline.update({Email :" sk.sagarkhan95@gmail.com"},{$addToSet:{ 'BlogPosts.$.Comments':{"Title":"test"}}});

是的,我需要在php中这样做,但首先我是通过控制台尝试... 所以,如果我得到PHP语法,那么它将使我的工作更容易... 提前谢谢

1 个答案:

答案 0 :(得分:2)

要使其正常工作,您必须指定BlogPosts中的哪个元素需要在email之上更新,因为您尝试将数组添加到数组中。您必须告诉Mongo您尝试将阵列添加到哪个阵列。更新时使用位置运算符$

db.Timeline.updateOne( {"Email": "sk.sagarkhan95@gmail.com", "BlogPosts.Title" : "PartyTime"}, {$addToSet : {"BlogPosts.$.Comments" : {"Title" : "test"}}} )