在嵌套数组中推送元素(Mongodb)

时间:2018-07-12 06:43:38

标签: arrays mongodb multidimensional-array

我的名为msgs的Mongodb数据库集合如下所示:

[
   { 
     "_id" : ObjectId("5b45c387d774550874df7d47"),
     "userID" : "olivia",
     "friends" : [ 
                   { "userID" : "tom", "messages" : [ ] },
                   { "userID" : "sophia", "messages" : [ ] },
                   { "userID" : "katrina", "messages" : [ ] }  
                 ] 
   }
   { 
     "_id" : ObjectId("5b45c39fd774550874df7d4a"),
     "userID" : "tom",
     "friends" : [ 
                   { "userID" : "steve", "messages" : [ ] },
                   { "userID" : "olivia", "messages" : [ ] } 
                 ] 
   }
]

我想通过在"messages"数组中推送一条消息来更新此集合。

在前端,也许用户olivia向用户tom发送了一条消息(字符串格式)。因此,我想编写一条语句,将消息(任何字符串)推送到olivia用户的消息数组中。

例如:

如果olivia"Hey Tom!"发送消息tom。我想要新的数据库,如下所示:

[
   { 
     "_id" : ObjectId("5b45c387d774550874df7d47"),
     "userID" : "olivia",
     "friends" : [ 
                   { "userID" : "tom", "messages" : [ { "text" : "Hey Tom!" } ] },
                   { "userID" : "sophia", "messages" : [ ] },
                   { "userID" : "katrina", "messages" : [ ] }  
                 ] 
   }
   { 
     "_id" : ObjectId("5b45c39fd774550874df7d4a"),
     "userID" : "tom",
     "friends" : [ 
                   { "userID" : "steve", "messages" : [ ] },
                   { "userID" : "olivia", "messages" : [ ] } 
                 ] 
   }
]

我尝试过此语句,但没有用:

db.msgs.update({"userID":"olivia","friends.userID":"tom"},{$push:{"messages":{text:"Hey Tom!"}}})

1 个答案:

答案 0 :(得分:1)

读取$ elemMatch标记和“ $”位置运算符以访问数组内的字段。

这是您的查询。

db.msgs.update({"userID":"olivia","friends":{$elemMatch:{"userID":"tom"}}},{$push:{"friends.$.messages":{text:"hello"}}})