如何解决如何构建一个临时合并两个字段的MongoDB查询?
我有一个模式,该模式具有一个名为ownerId
的字段和一个名为participantIds
的数组的字段。在前端,用户可以选择参与者。我正在使用这些ID来过滤文档,方法是使用participantIds
运算符查询$all
以及前端的参与者ID列表。除了文档中的participantsIds
不包含ownerId
之外,这是完美的。我考虑过使用聚合来添加一个新字段,该字段包含一个像这样的列表:[participantIds,ownerId]
,然后使用$all
来查询这个新字段,然后再删除该字段,因为它不需要在前端。
这样的查询看起来如何,或者有没有更好的方法来实现此行为?我现在真的迷路了,因为我试图在过去3个小时内使用mongo_dart实施此操作。
这是架构的样子:
{
_id: ObjectId(),title: 'Title of the Event',startDate: '2020-09-09T00:00:00.000',endDate: '2020-09-09T00:00:00.000',startHour: 1,durationHours: 1,ownerId: '5f57ff55202b0e00065fbd10',participantsIds: ['5f57ff55202b0e00065fbd14','5f57ff55202b0e00065fbd15','5f57ff55202b0e00065fbd13'],classesIds: [],categoriesIds: [],roomsIds: [],creationTime: '2020-09-10T16:42:14.966',description: 'Some Desc'
}
Tl; dr我想在$all
字段上使用participantsIds
运算符查询文档,但是 ownerId
应该包含在此查询中。>
我想要的不是查询:
participantsIds: ['5f57ff55202b0e00065fbd14','5f57ff55202b0e00065fbd13']
我要查询以下内容:
participantsIds: ['5f57ff55202b0e00065fbd14','5f57ff55202b0e00065fbd13','5f57ff55202b0e00065fbd10']
解决方法
顺便说一句,在这里很有趣,如果您经常执行查询,最好使用Joe答案,或者插入时最好选择“全部”字段。
其他说明:在开始/结束时使用投影,以获取所需的东西
https://mongoplayground.net/p/UP_-IUGenGp
db.collection.aggregate([
{
"$addFields": {
"all": {
$setUnion: [
"$participantsIds",[
"$ownerId"
]
]
}
}
},{
$match: {
all: {
$all: [
"5f57ff55202b0e00065fbd14","5f57ff55202b0e00065fbd15","5f57ff55202b0e00065fbd13","5f57ff55202b0e00065fbd10"
]
}
}
}
])
,
不完全了解您想做什么,但这也许会有所帮助:
db.collection.find({
ownerId: "5f57ff55202b0e00065fbd10",participantsIds: {
$all: ['5f57ff55202b0e00065fbd14','5f57ff55202b0e00065fbd15','5f57ff55202b0e00065fbd13']
})
,
您可以使用update的管道形式将所有者添加到参与者列表或添加新的合并字段:
db.collection.update({},[{$set:{
allParticipantsIds: {$setUnion: [
"$participantsIds",["$ownerId"]
]}
}}])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。