在mongodb查询中添加自定义字段
我对mongodb中的一个集合有一个问题 这是我的集邮在mongodb查询中添加自定义字段,mongodb,mongodb-.net-driver,mongodb-query,Mongodb,Mongodb .net Driver,Mongodb Query,我对mongodb中的一个集合有一个问题 这是我的集邮 { "_id" : ObjectId("530f67584fb1a510bc18c03f"), "creatorId" : "5f6f2c26-4101-4eae-90d1-20d109bea925", "creationDate" : ISODate("0001-01-01T00:00:00Z"), "category" : 23, "location" : [ -60.67045855832774,
{
"_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)
- 如果有回复(replies.count>0)
- 如果这个职位不是我的
- 如果有一个我的回复(有一个回复为reply.creatorId==clientId)
好的,find不能这样做。但是有一种模糊的方法可以通过使用来获得结果。因此,假设您有一个
creatorId
变量,该变量位于您的Id中:
db.collection.aggregate([
//匹配你的帖子
{“$match”:{“creatorId”:creatorId},
//展开阵列
{“$REWIND”:“$replies”},
//投影所需的字段,注意逻辑条件
{“$project”:{
"类别":一,,
“地点”:1,
“isMine”:{“$eq”:[“$creatorId”,creatorId]},
“回答”:{“$eq”:[
“$replays.creatorId”,
创造者
]}
}},
//在唯一文档上分组,获取总和和最大值
{“$组”:{
“_id”:{
“\u id”:“$\u id”,
“类别”:“$category”,
“位置”:“$location”,
“isMine”:“$isMine”,
},
“答复:{“$sum”:1},
“OneAnswerIsMine”:{“$max”:“$answerIsMine”}
}},
//更好的输出
{“$project”:{
“\u id”:“$\u id.\u id”,
“类别”:“$\u id.category”,
“位置”:“$\u id.location”,
“isMine”:“$\u id.isMine”,
“答复”:1,
“一个回答”:1
}}
])
除其他事项外,您的“自定义字段”是通过使用逻辑运算符生成的。在此,我们将creatorId
的字段值与存储的的变量值进行比较。当它们“相等”时,条件为true
,否则为false
因此,欢迎使用聚合。这是一个非常强大的工具,可以获得您想要的结果,您不仅可以将内容“分组”,还可以将文档转换为您想要的形式
请参阅您的驱动程序文档以了解语言详细信息(这里为大家提供的是JSON),但您基本上是在管道的每个阶段形成BSON文档。难以置信!!非常感谢您。我立即尝试。最后一个问题:我可以插入地理多边形“和条件”吗?再次感谢Luca
"_id" : ObjectId("530f67584fb1a510bc18c03f"),
"category" : 23,
"location" : [
-60.67045855832774,
52.86982649605247
],
"isMine" : true,
"replies" : 20,
"OneAnswerIsMine": false