Mongodb查询选择嵌入文档
我有以下Mongodb文档。要获取参与者='xxx'和(message.touserid='xxx'或message.fromuserid='xxx')的文档 我使用以下查询,但它返回的是所有消息,而不是一条。你能告诉我如何达到这个结果吗Mongodb查询选择嵌入文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我有以下Mongodb文档。要获取参与者='xxx'和(message.touserid='xxx'或message.fromuserid='xxx')的文档 我使用以下查询,但它返回的是所有消息,而不是一条。你能告诉我如何达到这个结果吗 {“$and”:[{“参与者”:{“$regex”:“56d314a8e4b04d7f98cfd0c6”},$or:[{“messages.touserId”:“56d314a8e4b04d7f98cfd0c6”},{“messages.formuserId”
{“$and”:[{“参与者”:{“$regex”:“56d314a8e4b04d7f98cfd0c6”},$or:[{“messages.touserId”:“56d314a8e4b04d7f98cfd0c6”},{“messages.formuserId”:“56d314a8e4b04d7f98cfd0c6”}字段:{“id”:“0”,“产品”:“0”,“参与者”:“0”,“消息”:“0”}
由于这是元素上的复杂匹配-
$elemMatch
在这种情况下不能使用,
因此,聚合框架是一个助手
var match = {
$match : {
participants : /56d314a8e4b04d7f98cfd0c6/
}
}
var unwind = {
$unwind : "$messages"
}
var matchSecond = {
$match : {
$or : [{
"messages.touserId" : "56d314a8e4b04d7f98cfd0c6"
}, {
"messages.formuserId" : "56d314a8e4b04d7f98cfd0c6"
}
]
}
}
var projection = {
$project : {
_id : 0,
messages : 1
}
}
db.deb.aggregate([match, unwind, matchSecond, projection])
和输出:
谢谢你的回复。但我也想从讨论文档中选择一些元素。可以使用单个查询完成吗?如果是,如何使用?还有什么方法可以在消息上使用切片selection@Debopam从聚合中删除最后一个
projection
,然后查看文档的形状。@Debopam,只要您对数组字段使用OR,简单查询将需要使用ForEach和array ITERATION来选择匹配的子项
var match = {
$match : {
participants : /56d314a8e4b04d7f98cfd0c6/
}
}
var unwind = {
$unwind : "$messages"
}
var matchSecond = {
$match : {
$or : [{
"messages.touserId" : "56d314a8e4b04d7f98cfd0c6"
}, {
"messages.formuserId" : "56d314a8e4b04d7f98cfd0c6"
}
]
}
}
var projection = {
$project : {
_id : 0,
messages : 1
}
}
db.deb.aggregate([match, unwind, matchSecond, projection])
{
"messages" : {
"_id" : {
"oid" : "574eb874027520c2158268d2"
},
"formuserId" : "56841002eceefce22f455c7f",
"fromuser" : "9674642375",
"touserId" : "56d314a8e4b04d7f98cfd0c6",
"touser" : "debopam_r",
"message" : "Creating Discussion",
"isMute" : false,
"index" : 1.0,
"createDate" : {
"date" : "2016-06-01T10:27:00.500Z"
},
"lastModifiedDate" : {
"date" : "2016-06-01T10:27:00.501Z"
},
"createdBy" : "9674642375",
"lastModifiedBy" : "9674642375"
}
}