有没有办法获取服务器生成的ObjectId而不是C#驱动程序生成的ObjectId?使用MongoCollectionSettings.AssignIdOnInsert = false
only可使您清零ObjectIds。我正在对一个封闭的集合进行多线程插入,并且看到线程在ObjectId生成和插入之间切换。这会导致应该按自然顺序排序的带尾游标排序的集合中的ObjectIds乱序。现在,我正在为插入使用静态锁定对象,但这对不同的可执行文件/服务器没有帮助。
似乎可以通过pymongo驱动程序实现:服务器在pymongo上生成的ObjectID
上限集合按插入顺序维护文档,因此,理想情况下,您应使用自然顺序,而不要依赖Generate的时间戳_id
。您的尾部光标将以自然顺序阅读文档,因此不应基于进行任何假设_id
。
_id
要_id
使用C#驱动程序在服务器端生成,您需要:
[BsonIgnoreIfDefault]
AssignIdOnInsert = false
_id
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Bson.Serialization.Attributes;
public class MyDoc {
[BsonIgnoreIfDefault]
public ObjectId? Id;
public int X;
}
public static class Program {
public static void Main(string[] args) {
MongoClient client = new MongoClient(); // connect to localhost
var server = client.GetServer ();
var database = server.GetDatabase("test");
var collectionSettings = new MongoCollectionSettings { AssignIdOnInsert = false };
var collection = database.GetCollection<MyDoc>("nullid", collectionSettings);
// Insert document without _id
collection.Insert(new MyDoc { X = 1});
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句