我的名为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!"}}})
答案 0 :(得分:1)
读取$ elemMatch标记和“ $”位置运算符以访问数组内的字段。
这是您的查询。
db.msgs.update({"userID":"olivia","friends":{$elemMatch:{"userID":"tom"}}},{$push:{"friends.$.messages":{text:"hello"}}})