C#MongoDB驱动程序保存命令创建重复项

时间:2014-09-26 16:09:58

标签: c# mongodb

我刚刚开始使用MongoDB进行c#,我试图在一个集合中插入一些文档。我正在使用' save'命令(甚至尝试使用upsert标志进行更新)但每次运行我的代码时都会不断插入重复项:新记录有新的对象ID(随机生成),但所有其余数据都是相同的。我究竟做错了什么?任何建议都非常感谢。

这是我的代码:

List<LatestDataReduced> latestdata = new List<LatestDataReduced>(); 
//LatestDataReduced is the model of my documents
foreach (var dep in lrd) 
{
    foreach (var rec in dep.record)
    {
        var entity = new LatestDataReduced();
        entity.PlatformID = platid;

        //fill up data in entity...    

        latestdata.Add(entity);
    }
}
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("emodnet2");
var collection = database.GetCollection<LatestDataReduced>("latestdata");
foreach (var ld in latestdata)
{
    /*var query = Query.And(Query.EQ("Id", ld.Id), Query.EQ("Date", ld.Date), Query.EQ("Depth", ld.Depth), Query.EQ("PlatformID", ld.PlatformID), Query.EQ("Pressure", ld.Pressure));
    var update = Update.Replace(ld);
    collection.Update(query, update, UpdateFlags.Upsert);*/

    collection.Save(ld);
}

LatestDataReduced类:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MongoDB.Models
{
    public class CodeValuePair
    {
        public string Code { get; set; }
        public double Value { get; set; }
    }

    public class LatestDataReduced
    {
        //[BsonIgnoreIfDefault]
        public ObjectId Id { get; set; }
        public int PlatformID { get; set; }
        public DateTime Date { get; set; }
        public double Depth { get; set; }
        public List<CodeValuePair> ParamValue { get; set; }
        public double Pressure { get; set; }
        public List<CodeValuePair> ParamValueInfo { get; set; }
        public string Roos { get; set; }
    }
}

1 个答案:

答案 0 :(得分:3)

我找到了一种方法来完成这项工作!

我认为在mongo中对Ids使用类“ObjectId”是强制性的,我无法为我的文档提供真正的标识符,但后来我发现你可以简单地使用字符串ID:

        public class LatestDataReduced
        {
            //[BsonIgnoreIfDefault]
            public String Id { get; set; }
            public int PlatformID { get; set; }
            public DateTime Date { get; set; }
            public double Depth { get; set; }
            public List<CodeValuePair> ParamValue { get; set; }
            public double Pressure { get; set; }
            public List<CodeValuePair> ParamValueInfo { get; set; }
            public string Roos { get; set; }
        }

所以我给了我的文档一个有效的标识符,mongo现在能够正确识别相同的文档并更新它们而不是插入它们。

非常感谢你的关注!

祝星期一好看