在mongodb中为每个用户应用FIFO文档
我有mongodb集合和以下示例文档在mongodb中为每个用户应用FIFO文档,mongodb,mongoose,mongodb-query,mongoose-schema,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,我有mongodb集合和以下示例文档 [ { userId: 'Id1', activity: '1' }, { userId: 'Id1', activity: '2' }, { userId: 'Id1', activity: '3' }, { userId: 'Id1', activity: '4' }, { userId: 'Id1', activity: '5' }, { userId: 'Id2', activ
[
{
userId: 'Id1',
activity: '1'
},
{
userId: 'Id1',
activity: '2'
},
{
userId: 'Id1',
activity: '3'
},
{
userId: 'Id1',
activity: '4'
},
{
userId: 'Id1',
activity: '5'
},
{
userId: 'Id2',
activity: '7'
},
]
现在我想插入以下文档
{
userId: 'Id1',
activity: '6'
}
但是应用FIFO,即我想将每个用户的文档数限制为5,在这种情况下,我想先删除以下文档,假设它是先插入的
{
userId: 'Id1',
activity: '1'
}
然后插入文档,即
{
userId: 'Id1',
activity: '6'
}
如何使用mongodb或mongoose实现这一点?您可以将模式反规范化为:
{
"_id":ObjectId("111342"),
"userId": "abc",
"activity_count":34,
"last_5_activities":[
{"type":"like","timestamp":12345555},
{"type":"subscribe","timestamp":12375555}
]
}
然后可以使用mongodb$push和$slice更新活动
db.activities.update(
{ "userId": "abc" },
{
"$push": {
"last_5_activities": {
"$each": [ {"type":"comment","timestamp":1239554} ],
"$slice": -5
}
}
}
)
除了Holy_diver建议的之外,您还可以使用封顶集合。@D.SM,封顶集合限制集合中的文档总数。因此不适合此用例问题要求将文档限制为每个用户5个,没有文档,而不是全部文档设计中存在约束,即我无法将其反规范化