[MONGODB] MongoDB를 닷넷 드라이버 2.0 풀 (제거 요소)
MONGODBMongoDB를 닷넷 드라이버 2.0 풀 (제거 요소)
당신이 날 2.0 드라이버가 제대로 "풀 (제거)"를 실행하는 데 도움이 될 수 있습니다.
이 같은 컬렉션을하고 난 추종자 필드에 의해 페티라는 이름으로 첫 번째 추종자를 제거합니다.
{
"_id": ObjectId("554e05dfc90d3d4dfcaa2aea"),
"username": "bodrum",
"followerList": [
{
"_id": ObjectId("554e0625a51586362c33c6df"),
"follower": "fethiye",
"avatar": "fethiye.png"
},
{
"_id": ObjectId("554e0625a51586362c33c6df"),
"follower": "izmir",
"avatar": "izmir.png"
}
]
}
어떻게이 쿼리를 해결할 수 있습니까?
var filter = new BsonDocument("username", "bodrum");
var update = Builders<Person>.Update.Pull("followerList:follower", "fethiye");
Person pr = collection.FindOneAndUpdateAsync(filter, update).Result;
감사.
해결법
-
==============================
1.배열 요소를 제거하기 위해 필터를 사용하는 경우 (전체 요소를 일치) 풀 대신 PullFilter 빌더를 사용합니다.
배열 요소를 제거하기 위해 필터를 사용하는 경우 (전체 요소를 일치) 풀 대신 PullFilter 빌더를 사용합니다.
var collection = db.GetCollection<Person>("people"); var filter = new BsonDocument("username", "bodrum"); var update = Builders<Person>.Update.PullFilter("followerList", Builders<Follower>.Filter.Eq("follower", "fethiye")); var result = collection.FindOneAndUpdateAsync(filter, update).Result;
또는 좀 더 간결하게, 람다를 사용하여 :
var update = Builders<Person>.Update.PullFilter(p => p.followerList, f => f.follower == "fethiye"); var result = collection .FindOneAndUpdateAsync(p => p.username == "bodrum", update).Result;
-
==============================
2.당신이 컬렉션 이름 사람이 가정하면, 당신은 배열에서 레코드를 제거하기 위해 PullFilter을 사용할 수 있습니다
당신이 컬렉션 이름 사람이 가정하면, 당신은 배열에서 레코드를 제거하기 위해 PullFilter을 사용할 수 있습니다
var filterBuilder = Builders<Person>.Filter.Eq(person => person.username, "bodrum"); var updateBuilder = Builders<Person>.Update.PullFilter(p => p.followerList, Builders<Person>.Filter.Eq(per => per.follower, "fethiye")); var updateResult = collection.UpdateOne(filterBuilder, updateBuilder); Console.WriteLine( $"MatchedCount: {updateResult.MatchedCount}, ModifiedCount: {updateResult.ModifiedCount}");
우리는 또한 필터링 된 문서 내에서 값의 배열을 제거해야하는 경우 우리는이 라인 업데이트 빌더를 대체 할 수있다
var updateBuilder = Builders<Person>.Update.PullFilter(p => p.followerList, Builders<Person>.Filter.In(per => per.follower, new List<string> {"fethiye", "izmir"}));
또한 많은 문서를 저장, updateOne는 updateMany로 대체 될 수 있습니다
var updateResult = collection.UpdateMany(filterBuilder, updateBuilder);
-
==============================
3.이것은 내가 중첩 된 배열 객체를 삭제하는 데 사용하는 것입니다
이것은 내가 중첩 된 배열 객체를 삭제하는 데 사용하는 것입니다
-parentpath : followerList -propertie : 추종자 - 값 : fethiye.png
var filter = new BsonDocument("_id", ObjectId.Parse(id)); var updateValues = Builders<object>.Update.PullFilter(parentPath, Builders<object>.Filter.Eq(propertie, value)); DatabaseCollection.FindOneAndUpdate(filter, updateValues);
예 깊은 중첩 된 배열 객체를 삭제합니다 : 이제 이름 미상으로 개체를 삭제하자
-parentPath : followerList.0.testArray -propertie : 이름 - 값 : 미상
{ "_id": ObjectId("554e05dfc90d3d4dfcaa2aea"), "username": "bodrum", "followerList": [ { "_id": ObjectId("554e0625a51586362c33c6df"), "follower": "fethiye", "testArray": [ { "name":"John" }, { "name":"Doe" }, { "name":"Jason" } ] }, { "_id": ObjectId("554e0625a51586362c33c6df"), "follower": "izmir", "avatar": "izmir.png" } ] }
-
==============================
4.수도 내가 MongoDB.Entities를 사용하여 훨씬 간단 솔루션을 제공합니다. 사람과 추종자들은 자신의 컬렉션에 저장되고 일대 다 관계를 나타내고있다.
수도 내가 MongoDB.Entities를 사용하여 훨씬 간단 솔루션을 제공합니다. 사람과 추종자들은 자신의 컬렉션에 저장되고 일대 다 관계를 나타내고있다.
using System.Linq; using MongoDB.Entities; namespace StackOverflow { public class Person : Entity { public string Username { get; set; } public Many<Follower> FollowerList { get; set; } public Person() => this.InitOneToMany(() => FollowerList); } public class Follower : Entity { public string Name { get; set; } public string Avatar { get; set; } } class Program { static void Main(string[] args) { new DB("followers"); var person1 = new Person { Username = "bodrum"}; person1.Save(); var follower1 = new Follower { Name = "fethiye", Avatar= "fethiye.png" }; follower1.Save(); var follower2 = new Follower { Name = "izmir", Avatar = "izmir.png" }; follower2.Save(); person1.FollowerList.Add(follower1); person1.FollowerList.Add(follower2); var fathiye = person1.FollowerList.Collection() .Where(p => p.Name == "fethiye") .FirstOrDefault(); person1.FollowerList.Remove(fathiye); } } }
from https://stackoverflow.com/questions/30141958/mongodb-net-driver-2-0-pull-remove-element by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 유성 : 컬렉션, 변수, 출판 및 구독 이름 사이의 차이점은 무엇입니까? (0) | 2019.12.08 |
---|---|
[MONGODB] 예외 : 날짜에 BSON 유형 EòÒ에서 변환 할 수 없습니다 (0) | 2019.12.08 |
[MONGODB] 쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제] (0) | 2019.12.08 |
[MONGODB] 이 개 필드를 사용하여 몽구스 지정 유효성 검사 (0) | 2019.12.08 |
[MONGODB] 몽구스를 사용하여 MongoDB의 문서에서 키를 삭제 (0) | 2019.12.08 |