这是我的收藏品
[{
'_id':'1',
'name':'John',
'message':'Hi'
},
{
'_id':'2',
'name':'John',
'message':'Hey'
},
{
'_id':'3',
'name':'John',
'message':'Hello'
}]
当我保存下一个数据时,
'_id' will be '4', 'name':'John', 'message':'howdy'.
我想将'_id':'4'
推送到收藏集并弹出'_id':'1'
;同样,当我将'_id':'5'
保存到同一个集合'_id':'2'
时会删除等等。
我想删除旧数据并保存集合中限制条目的新数据。
那我该怎么在MongoDB
架构中写这个呢?
答案 0 :(得分:1)
你不需要编写任何模式,只需要做一点逻辑。这就是
计算收集的数量并将新文档的_id除以计数并为其分配余数。现在,这个新的_id是您必须更新文档的地方。
count = numberOfDocumentsInCollection newDoc._id = newDoc._id%count
以下是完整的代码。
var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/testdb';
var newDoc = {
_id:4,
name:"John",
message:"this is vajahat"
}
MongoClient.connect(url,function(err,db){
if(err)
return console.log(err);
var collection = db.collection('test');
collection.count(function(err,count){
// this is number of documents
var idToBeUpdatedAt= newDoc._id%count;//<<-------Here is the trick
delete newDoc._id;
console.log(idToBeUpdatedAt,count);
collection.updateOne({"_id":idToBeUpdatedAt},{"$set":newDoc},function(err,updated){
if(err)
return console.log(err);
console.log("updated");
db.close();
});
});
})
答案 1 :(得分:1)
您可以使用上限集合来实现此目的。 mongo
shell中的一个示例:
db.createCollection('capped', {capped: true, size: 100000, max: 3})
将创建一个名为capped
的上限集合,最大大小为100000字节,最多包含3个文档。插入新文档时,将删除最旧的文档。
> db.capped.insert({_id: 1, name: 'John', message: 'Hi'})
> db.capped.insert({_id: 2, name: 'John', message: 'Hey'})
> db.capped.insert({_id: 3, name: 'John', message: 'Hello'})
> db.capped.find()
{ "_id" : 1, "name" : "John", "message" : "Hi" }
{ "_id" : 2, "name" : "John", "message" : "Hey" }
{ "_id" : 3, "name" : "John", "message" : "Hello" }
插入新文档时:
> db.capped.insert({_id: 4, name: 'John', message: 'howdy'})
> db.capped.find()
{ "_id" : 2, "name" : "John", "message" : "Hey" }
{ "_id" : 3, "name" : "John", "message" : "Hello" }
{ "_id" : 4, "name" : "John", "message" : "howdy" }
自动从集合中删除最旧的文档。类似地:
> db.capped.insert({_id: 5, name: 'John', message: 'hello'})
> db.capped.find()
{ "_id" : 3, "name" : "John", "message" : "Hello" }
{ "_id" : 4, "name" : "John", "message" : "howdy" }
{ "_id" : 5, "name" : "John", "message" : "hello" }
有关详细信息,请参阅Capped Collections page。