Javascript MongoDB:$push多个对象,$pop一次更新多个对象
想象一个MongoDB文档包含100个对象的数组。我们希望将数组长度固定在Javascript MongoDB:$push多个对象,$pop一次更新多个对象,javascript,node.js,mongodb,meteor,mongodb-query,Javascript,Node.js,Mongodb,Meteor,Mongodb Query,想象一个MongoDB文档包含100个对象的数组。我们希望将数组长度固定在100。当一批新对象到达时(可能是1、5、10等),我们希望用新对象更新数组,同时删除等量的旧对象,以便数组长度保持不变。我选择将MongoDB中的阵列读取到我的应用程序中,进行一些修改,然后使用$set更新阵列: var newData = [ { ... }, { ... }, { ... }, { ... }, { ... } ]; var oldData = Collection.findOne
100
。当一批新对象到达时(可能是1、5、10等),我们希望用新对象更新数组,同时删除等量的旧对象,以便数组长度保持不变。我选择将MongoDB中的阵列读取到我的应用程序中,进行一些修改,然后使用$set
更新阵列:
var newData = [
{ ... },
{ ... },
{ ... },
{ ... },
{ ... }
];
var oldData = Collection.findOne({exchange: 'The Exchange', market: 'The Market'}).data;
newData = newData.concat(oldData).slice(0, 100);
Collection.update(
{
exchange: 'The Exchange',
market: 'The Market'
},
{
$set: {
data: newData
}
}
在MongoDB中,$push
可以将新的推到前面,同时使用$pop
从后面移除等量的对象吗
在MongoDB中,$将新的推到前面,同时使用$pop从后面移除等量的对象,这可能吗
是的,使用:
例如,请参见答案是“是”和“否”,用稍微令人困惑的术语来说。在单个更新中,不能同时对同一数组执行和操作。这对于操作的“相同路径”是不允许的,因为在当前更新语法中,$push
或$pull
实际上都不是以任何顺序发生的
然而,在你的特定环境中,这不是你要问的。为了满足您的需要,MongoDB支持可以与一起使用的修饰符。这将有效地“限制”阵列的总大小,因为新项目将添加到其中
以你为例:
Collection.update(
{ "exchange": "The Exchange", "market": "The Market" },
{ "$push": { "data": { "$each": newData, "$slice": 100 } } }
)
这有效地将数组的大小限制为第一个100
成员,同时向其中添加新项
请注意,meteor实现的“minimongo”客户端版本可能不支持这一点。不过,您可以在服务器上执行此操作,并通过发布公开该方法。有很多例子向您展示如何使用publish。在我的打字中再次回答。请注意,在JavaScript和“切片”操作的MongoDB语法中,负数表示从数组末尾开始。
Collection.update(
{ "exchange": "The Exchange", "market": "The Market" },
{ "$push": { "data": { "$each": newData, "$slice": 100 } } }
)