试图获取最后一个记录值一,但不起作用。用猫鼬怎么做。
在mongodb中采样数据记录:
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
});
});
属性的值是“已测试”,因此我尝试获取该值。
vue.config.js
答案 0 :(得分:3)
最后,经过3个小时的尝试,我找到了答案。
User.find({}).sort({_id: -1}).limit(1).then((products) => {
console.log(products[0].voice)
})
答案 1 :(得分:0)
因为您做错了。实际上,如果您不需要最后一次插入集合文档中,而是最后一次更新,则应在架构(mongoose docs)中使用timestamps
所以您的收集模式应该是这样的:
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()
选项的情况下进行更新。并通过以下方式更新了Mongoose Doc
本身:
t.voice = new_value
t.save()
但是我强烈建议您使用findOneAndUpdate
方法。
答案 2 :(得分:0)
我发现这种方法更简单。
let lastDoc = (await Model.find({}).sort({_id: -1}).limit(1))[0];
console.log(lastDoc);
否则,如果在函数内部使用它,请确保该函数为async
。
let docHandler = async () => {
let lastDoc = (await Model.find({}).sort({_id: -1}).limit(1))[0];
console.log(lastDoc);
};