我对mongodb中的集合提出了这种情况的问题
这是我的邮政集合
{
"_id" : ObjectId("530f67584fb1a510bc18c03f"),
"creatorId" : "5f6f2c26-4101-4eae-90d1-20d109bea925",
"creationDate" : ISODate("0001-01-01T00:00:00Z"),
"category" : 23,
"location" : [
-60.67045855832774,
52.86982649605247
],
"replies" :
[
{
"_id" : ObjectId("531acfc34fb1a50edc86fdcb"),
"creatorId" : "0891f887-a6bc-4183-be10-2653b7b45e79"
},
{
"_id" : ObjectId("531acfc34fb1a50edc86fdcb"),
"creatorId" : "0891f887-a6bc-4183-be10-2653b7h76s22"
}
]
}
我执行查询传递正在观看页面的clientId和多边形以返回多边形区域中的所有帖子,我想添加自定义字段,因为我想知道这个信息:
如果Post是我的(clientId == creatorId)
如果帖子不是我的
我只想在一个查询中执行此操作,因为我想查看所有帖子列表,并知道帖子的标记有哪种不同的颜色。
我想要的结果是这样的(如果可能的话)或其他返回所需信息的东西。
{
"_id" : ObjectId("530f67584fb1a510bc18c03f"),
"category" : 23,
"location" : [
-60.67045855832774,
52.86982649605247
],
"isMine" : true,
"replies" : 20,
"OneAnswerIsMine": false
}
谢谢谢谢,提前致谢
→
答案 0 :(得分:2)
好的,所以找不到这个。但是有一种模糊的方法可以使用aggregate来获得结果。假设您在{strong>您的 ID:
的某处有一个creatorId
变量
db.collection.aggregate([
// Match your posts
{ "$match": { "creatorId": creatorId },
// Unwind the array
{ "$unwind": "$replies" },
// Project the fields you want, notice the logical conditions
{ "$project": {
"category": 1,
"location": 1,
"isMine": { "$eq": [ "$creatorId", creatorId ] },
"answerIsMine": { "$eq": [
"$replies.creatorId",
creatorId
]}
}},
// Group on the unique document, get sum and max value
{ "$group": {
"_id": {
"_id": "$_id",
"category": "$category",
"location": "$location",
"isMine": "$isMine",
},
"replies": { "$sum": 1 },
"OneAnswerIsMine": { "$max": "$answerIsMine" }
}},
// Nicer Output
{ "$project": {
"_id": "$_id._id",
"category": "$_id.category",
"location": "$_id.location",
"isMine": "$_id.isMine",
"replies": 1,
"OneAnswerIsMine": 1
}}
])
除了其他内容,您的"自定义字段"是使用逻辑$eq
运算符生成的。在这里,我们将creatorId
的字段值与您存储的您的变量值进行比较。当他们平等时#34;条件为true
,否则为false
。
因此,欢迎聚合。这是一个非常强大的工具,可以获得您想要的结果,而且您不仅可以" group"事情在一起,但以其他方式将文档转换为您想要的形式
请参阅驱动程序文档以获取语言详细信息(此处提供的是适用于所有人的JSON),但您基本上是在管道的每个阶段形成BSON文档。