我正在尝试将对象推送到嵌入式数组,并在切片为5时按desc排序。
如果我将创建更改为1,但它是'升序',则此方法有效。现在发生的是新对象,实际上并没有插入到数组中,如果它有5个。
知道怎么做吗?谢谢!
db.user.update({_id : user_id},
{ "$push" : { items : { "$each" : [{
action : 'one',
status : 'two',
value : 'three',
created: new Date()
}
],
"$sort" : {created: -1},
"$slice" : -5
}
}
}
, function(err, doc) {
});
答案 0 :(得分:0)
发生的事情是你要求MongoDB按降序排序项目,只保留最后5项;这意味着只保留5个最小的物品。但是,由于您按升序插入项目(因为Date()不断增加),一旦插入5个项目,您已经拥有5个最小的项目,因此不会插入后续项目。
如您所知,如果您将排序顺序更改为升序,那么您将保留5个最大的项目;因为每个新项目的Date()都比之前的所有项目都要大,所以每个新项目最初都会在最大的5个项目中,因此会出现在列表中。
如果您需要按降序排序的5个最大项目,您可以使用升序排序顺序,当您按$项目以使用$ slice保留最大5,然后当您查询数据时,您可以反转客户端的结果顺序。
答案 1 :(得分:0)
代码中的所有内容都按预期工作。因此,你实际上看不到任何结果。
您的代码正在做什么:
_id = user_id
items
中插入一堆对象(它发生束= 1)created
由于Date()
字段而出现问题。日期一直在增加。因此,每个新元素都不会在这5个最小元素中结束。当您更改created : 1
时,按升序排序,新日期肯定会以5个元素结束。
关于这个:
知道怎么做吗?谢谢!
如果你想更好地描述你想要的东西,我希望我能告诉你你可以改变什么,因为现在你的脚本正在做正确的事情。如你所述,你可以放created : 1