sql >> Databasteknik >  >> NoSQL >> MongoDB

Elementet 'id' matchar inte något fält eller felegenskap med kapslade klasser

Lång historia kort:allt handlar om konventioner. MongoDB .NET-drivrutinen avslöjar den statiska klassen ConventionRegistry som låter dig registrera dina egna konventioner (mer här ). Dessutom finns det två "inbyggda" konventioner __defaults__ och __attributes__ . Gräver djupare (drivrutin

Vilket betyder att id medlemmar kommer att betraktas som vanliga BSON _id-element.

Hur fixar man det?

Du kan bli av med standardkonventioner

ConventionRegistry.Remove("__defaults__");

Men automatiskt kommer du att släppa alla andra drivrutiner, vilket är ganska riskabelt. Alternativt kan du skapa en falsk egendom som alltid kommer att vara tom:

public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }

    [BsonId]
    public ObjectId FakeId { get; set; }
}

eller så kan du bara använda BsonNoId attribut som

[BsonNoId]
public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }
}

Så konventionen kommer att ställa in ditt id som IdMember i klasskartan men under efterbearbetning kommer detta attribut att tvinga IdMember att vara null och din klass kommer att deserialiseras framgångsrikt



  1. kör flera instanser av mongod as service

  2. Mongoose and new Schema:returnerar ReferenceError:Schema är inte definierat

  3. Hur kör man fulltextsökkommando i MongoDB med Java Driver?

  4. Mongodb aggregeringsuppslagning med villkor