我在我的应用程序中有交换平台,并且我以下列格式保存每条消息
{
userIds: [ 'user1Id', 'user2Id' ],
msg: "message",
sentBy: 'user1',
sentAt: new Date()
}
{
userIds: [ 'user1Id', 'user3Id' ],
msg: "message",
sentBy: 'user1',
sentAt: new Date()
}
{
userIds: [ 'user1Id', 'user2Id' ],
msg: "message",
sentBy: 'user1',
sentAt: new Date()
}
有没有办法从集合中获得独特的对话?
例如,从上面的列表我想得到
{
userIds: [ 'user1Id', 'user2Id' ],
msg: "message",
sentBy: 'user1',
sentAt: new Date()
}
{
userIds: [ 'user1Id', 'user3Id' ],
msg: "message",
sentBy: 'user1',
sentAt: new Date()
}
这两条记录,
这里有什么mongo查询?
除了查询所有记录还有其他方法可以手动执行吗?
或任何人建议使用更好的架构,我刚开始使用此功能,因此我可以更改架构。
我考虑使用
{
userIds: [ 'user1Id', 'user2Id' ],
msgs: [
{
msg: "message",
sentBy: 'user1',
sentAt: new Date()
},
{
msg: "message",
sentBy: 'user2',
sentAt: new Date()
}
],
modifiedAt: new Date()
}
但决定反对它,因为只要有新的msg添加到msgs数组,整个字段就会被发送到客户端,所以使用第一个模式。
任何建议都是适用的。感谢。
答案 0 :(得分:1)
你可以使用聚合来做到这一点,
.aggregate([{$组:{_ ID:" $的userIds"}}])
请参阅this了解更多详情
您可以使用$ project选项将返回文档作为您希望的格式。
答案 1 :(得分:0)
我建议您只使用聚合。例如:
db.test.aggregate( {$group: {_id: "$userIds" } } )
将返回
{
"result" : [
{
"_id" : [
"user1Id",
"user3Id"
]
},
{
"_id" : [
"user1Id",
"user2Id"
]
}
],
"ok" : 1
}
您可以在文档Aggregation-Distinct中找到更多详细信息。