如何在猫鼬中获取最后一个记录的一个值

时间:2020-07-16 12:25:34

标签: node.js mongodb mongoose

试图获取最后一个记录值一,但不起作用。用猫鼬怎么做。

在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

3 个答案:

答案 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_onefield_two,而且还将拥有诸如createdAtupdatedAt的特殊字段

然后,不要忘记在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);
};