试图获取最后一个记录值1,但无法工作。 猫鼬怎么做。
MongoDB中的示例数据记录:
[
{
_id: 5f0c73f69b34214310d0acee,
name: "Test",
age: 28,
voice: "Not Tested"
},
{
_id: 5f0c73f69b34214310d0akke,
name: "Test2",
age: 38,
voice: "Tested"
}
]
猫鼬查询:
最后一条记录中的voice
属性的值被“测试”,因此我尝试获取该值。
var Order = mongoose.model(collectionName);
Order.find({}).sort({ _id: -1 }).limit(1).then((products) => {
products.findOne({voice}, function(err,obj) {
console.log(obj);//Output should be = Tested
});
});
因为你做错了。 实际上,如果不需要最后一次插入集合文档,而是需要最后一次更新,则应该在模式(猫鼬文档)中使用时间戳
所以您的集合模式应该是这样的:
let schema = new mongoose.Schema({
field_one: Number,
field_two: String,
},{
timestamps: true
});
因此,您将不仅具有field_one
和field_two
,而且还具有诸如createdat
和updatedat
之类的特殊字段
然后,不要忘了在updatedat
字段中为您的模式添加性能索引,如下所示:
schema.index({ updatedAt: -1 },{name: 'IndexName'});
并且只有它们使用:
async function LastUpdatedVoice () {
try {
let t = await model.findOne({ "field_one": "value" }).select('voice').lean().sort({updatedAt: -1});
console.log(t);
} catch (e) {
console.error(e)
}
}
对于最后插入的文档,代码将是相同的,但您应该使用updatedat
字段,而不是createdat
字段。
还有,还有一点:
*如果您需要在找到该文档后立即更新该文档,您可以在我的查询中不使用lean()
选项进行更新。 并更新了猫鼬文档
本身,通过:
t.voice = new_value
t.save()
但我强烈建议您使用findoneAndUpdate
方法。
最后,经过漫长的3个小时的尝试,我找到了答案。
User.find({}).sort({_id: -1}).limit(1).then((products) => {
console.log(products[0].voice)
})