我的架构看起来像这样:
{
"_id" : ObjectId("4f6af5c7065f92581a000013"),
....
"conversation" : [{
"_id" : ObjectId("4f6af5c7065f92581a000013"),
"msg" : "message1",
"userID" : 1
},{
"_id" : ObjectId("4f6af5c7065f92581a000016"),
"msg" : "message3",
"userID" : 1
},{
"_id" : ObjectId("4f6af5c7065f92581a000023"),
"msg" : "msg",
"userID" : 1
}]
}
我需要的是输出一个元素列表,其键值msg包含'msg' 是否可以这样做?
db.dialogs.find({ "_id" : new ObjectId('4f6af5c7065f92581a000013'), "conversation.msg" : /msg/i })
但它会输出有关该对象的所有信息。我需要的只是
{
"_id" : ObjectId("4f6af5c7065f92581a000023"),
"msg" : "msg",
"userID" : 1
}
答案 0 :(得分:1)
不,你不能自己选择子阵列的元素。将保留父文档的结构(但是,您可以选择不从其他对话的字段中进行选择(如示例中所示)。)