Attualmente mi sto familiarizzando con NoSQL creando una semplice applicazione web usando MongoDb con il driver C # ufficiale. Se ho capito correttamente il concetto NoSQL, solo il documento radice aggregato dovrebbe avere un id e le collezioni figlio sono prive di identità.
Ad esempio nel codice C # avrei i seguenti 2 Poco-s:
public class User
{
public BsonObjectId Id { get; set; }
[BsonElement("pets")]
public List<Pet> Pets { get; set; }
}
public class Pet
{
public string Name { get; set; }
}
Come risolverei un caso, dove voglio avere visioni CRUD separate per gli animali domestici? Con un database relazionale lo farei avendo l'id dell'animale domestico nella stringa di query, con NoSQL non ne sono sicuro.
Questa domanda è nata da quando ho provato ad aggiungere un campo ID al documento secondario "Animale domestico". Invece di un id per animale domestico, un oggetto denominato "_csharpnull" è stato invece aggiunto al database.
Ad esempio, se faccio questo:
public class User
{
public BsonObjectId Id { get; set; }
[BsonElement("pets")]
public List<Pet> Pets { get; set; }
}
public class Pet
{
public BsonObjectId Id { get; set; }
public string Name { get; set; }
}
Quindi questo documento è inserito nel database:
{
"_id" : ObjectId("5643a1f9766bcf0fc0b26f14"),
"pets" : [
{
"_id" : {
"_csharpnull" : true
},
"Name" : "T-Rex"
}
]
}
Quando il mio comportamento previsto sarebbe qualcosa del tipo:
{
"_id" : ObjectId("5643a1f9766bcf0fc0b26f14"),
"pets" : [
{
"_id" : ObjectId("56439adc766bcf49a0639992"),
"Name" : "T-Rex"
}
]
}