我有以下的课堂结构:

public class DBTestItem
{
    public int p0;
    public int p1;
    public int p2;
    public int p3;
    public int p4;
    public int p5;
    public int p6;
    public int p7;
    public string data;
}

public sealed class MongoTestItem : DBTestItem
{
    public ObjectId _id;
}

_身份证对我来说毫无意义。p0-p7表示复合键,data表示值。
我想将MongoTestItem文档保存在数据唯一的地方,理想情况下不执行更新,因为它们没有意义。换句话说,如果集合中不存在数据值,请保存。
我已经看过文档,但还不知道如何编写符合上述要求的语句。
我确实创建了一个不同的结构,其中p0-p7生成一个复合id,而data是一个列表,在这种情况下,语句如下:
var query = Query<MdbData>.EQ(x => x._id, doc._id);
var update = Update<MdbData>.Push(x => x.data, "somenewvalue");
col.Update(query, update, UpdateFlags.Upsert);

这有不同的语义,所以upsert是可以的。
我想写上面的内容,这样我可以评估性能差异。

最佳答案

如果只想检查字段“data”的值是否没有出现在其他文档中,可以为data创建一个唯一索引。
或者如果您想检查该字段data不存在于该文档中(当更新)时,可以使用运算符Query Builder

关于mongodb - 仅在所有字段都是唯一的情况下才将文档插入MongoDB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13046121/

10-14 17:10
查看更多