如何在不使用 eval 的情况下在 Mongo C# 驱动程序中使用自动增量字段? [英] How to use Auto Increment field in Mongo C# Driver without using eval?

查看:57
本文介绍了如何在不使用 eval 的情况下在 Mongo C# 驱动程序中使用自动增量字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 此处 中讨论的自动增量字段.

I'm using auto increment fild as discussed here.

我可以在 Mongo Console 中执行这个示例,但是我如何使用 c# 驱动程序实现这样的事情?

I can execute this example in Mongo Console, but how can I implement such a thing using c# driver ?

db.products.insert({
     "_id":getNextSequenceValue("productid"),
     "product_name":"Apple iPhone",
    "category":"mobiles"
})

是否可以在写操作中指定一个函数?

Is it possible to specify a function in the write operation ?

我可以使用 Eval 调用此函数,但由于它已被弃用,我想找到不使用它的解决方案.

I could call this function using Eval, but as it is being deprecated, I would like to find a solution without using it.

推荐答案

这里:

var client = new MongoClient(connectionString);
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("myDatabase");
var counterCol = db.GetCollection("counters")

var result = counterCol.FindAndModify(new FindAndModifyArgs()
{
    Query = Query.EQ(d => d.Id, "orderId"),
    Update = Update.Inc(d => d.Value, 1),
    VersionReturned = FindAndModifyDocumentVersion.Modified,
    Upsert = true, //Create if the document does not exists
});

使用新的 v2.x 驱动程序:

Using the new v2.x Driver :

public class Sequence
{
    [BsonId]
    public ObjectId _Id { get; set; }

    public string Name { get; set;  }

    public long Value { get; set;  }

    public void Insert(IMongoDatabase database)
    {
        var collection = database.GetCollection<Sequence>("sequence");
        collection.InsertOne(this);
    }

    internal static long GetNextSequenceValue(string sequenceName, IMongoDatabase database)
    {
        var collection = database.GetCollection<Sequence>("sequence");
        var filter = Builders<Sequence>.Filter.Eq(a => a.Name, sequenceName);
        var update = Builders<Sequence>.Update.Inc(a => a.Value, 1);
        var sequence = collection.FindOneAndUpdate(filter, update);

        return sequence.Value;
    }
}

这篇关于如何在不使用 eval 的情况下在 Mongo C# 驱动程序中使用自动增量字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆