如何通过_id获取特定消息。 我有一个数据库模式,如下所示:
{
"_id": ObjectID("5846eedaf0b51ed02ed846e2"),
"name": "conversation name"
"messages": [
{
"_id": ObjectID("584820a96866b6283361a4b9"),
"content": "hello",
"status": 0,
"type": 0
},
{
"_id": ObjectID("584820d56866b6283361a4ba"),
"content": "voices/1481122005696.mp3",
"status": 0,
"type": 3
}
]
}
答案 0 :(得分:1)
db.collection.find({}, {
'messages': {
$elemMatch: {
'_id': ObjectId("584820a96866b6283361a4b9")
}
}
})
这将匹配集合中的所有文档,并返回投影中的匹配数组子字段。请参阅Yogesh评论中发布的链接。
答案 1 :(得分:1)
由于您标记了mongoose,我这样说,但查询语法有效,因为它是mongoDB查询语法的一部分:
Conversation.findOne({
"messages._id": "584820a96866b6283361a4b9"
}, function(err, document){
if (err) {
console.log(err)
return
}
var message = document.messages.id("584820a96866b6283361a4b9")
})
finOne() method
将返回包含所有消息(子文档)和其他属性的完整父文档。然后,您需要筛选出子文档。 Mongoose提供了一种方法,可以使用document.messages.id("584820a96866b6283361a4b9")
轻松完成此操作,其中document将是传递给find回调的数据对象
请参阅: 匹配字段而不指定数组索引 https://docs.mongodb.com/v3.2/tutorial/query-documents/#query-on-arrays