sql >> Database >  >> NoSQL >> MongoDB

C# MongoDB - Trek een item uit de array van een genest document op basis van een ID

als ik uw vereiste goed heb begrepen, een pullFilter is wat je nodig hebt.

var filter = Builders<UserCollection>.Filter.Where(u => u.User.Contacts.Any(c => c._Id == contactID));
var update = Builders<UserCollection>.Update.PullFilter(u => u.User.Contacts, c => c._Id == contactID);
collection.UpdateOne(filter, update);

hier is het volledige programma om te testen als iemand geïnteresseerd is.

using MongoDB.Entities; // PM> Install-Package MongoDB.Entities
using MongoDB.Bson;    
using System.Linq;

namespace StackOverflow
{
    public class Program
    {
        public class UserCollection : Entity
        {
            public User User { get; set; }
        }

        public class User
        {
            public Contact[] Contacts { get; set; }
        }

        public class Contact
        {
            public ObjectId _Id { get; set; }
        }

        private static void Main(string[] args)
        {
            new DB("test");

            var contactID = ObjectId.GenerateNewId();

            (new UserCollection
            {
                User = new User
                {
                    Contacts = new[]
                    {
                        new Contact { _Id = ObjectId.GenerateNewId()},
                        new Contact { _Id = contactID}
                    }
                }
            }).Save();

            DB.Update<UserCollection>()
              .Match(u => u.User.Contacts.Any(c => c._Id == contactID))
              .Modify(b => b.PullFilter(u => u.User.Contacts, c => c._Id == contactID))
              .Execute();
        }
    }
}



  1. De opdracht UNSUBSCRIBE gebruiken in Redis 2.6.11

  2. Wijzig de standaard Mongo-verbindingspoolgrootte in spring-boot

  3. Documentgrootte in MongoDb

  4. Hoe het sharding-bereik voor elke shard in Mongo te definiëren?