Thread overview
MongoDB çeviri yardımı
Oct 30, 2017
erdem
Nov 01, 2017
erdem
October 30, 2017

Mongo veritabanı ile ağaç yapısının nasıl kullanılacağına dair bir yazı (https://www.codementor.io/slavko/storing-tree-structures-in-mongodb-example-code-du107tk8d) okuyordum.

Alıntı:

>

Operating with the Tree

This is pretty simple, but changing the position of the node within siblings will require additional calculations.
You might want to set high numbers like item position * 10^6 for the order so you can set a new node order as trunc (lower sibling order - higher sibling order)/2 - this will give you enough operations until you need to traverse whole the tree and set the order defaults to big numbers again.

Bu bölümü açıklayabilecek var mı acaba.

Ben örneğin buradaki örnekte Elektronik bölümü altındaki bölümler için

Fotoğraf Makinesi, Fotoğrafçılık Aksesuarları 10
En Çok Satılanlar 20
Cep Telefonu ve Aksesuarları 30

şeklinde sıra numarası veriyorum. Ya da işte En çok Satılanlar bölümü içerisindeki

Ipad 10
Iphone 20
Ipod 30
Blackberry 40

içinde gene aynı sıralamayı yapıyorum. Acaba burada ne anlatmak istemiş olabilirler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 01, 2017

Ben de çok daha değişik bir şey yaptım.

https://image.ibb.co/hvLrhb/mongotree.png

Şimdi bu şekilde bir ağacımız var diyelim. Bir dügümün tüm alt düğümlerini belirli bir sırayla nasıl bulabiliriz diye düşünüyordum.

Örneğin 0 numaralı düğümün tüm alt düğümlerini bulmak istiyoruz ama şu sırayla:

[0, 1, 4, 5, 6, 7, 2, 8, 9, 10, 11, 3, 12, 16, 17, 18, 19, 13, 14, 15]

Neden bu sırayla olduğuna gelince bunlar aslında Reddit tarzı içiçe geçmiş bir yorum sistemi diye düşünebiliriz. Bunları ekrana basmak için de en mantıklı sıralama yukarıdaki gibi geldi.

Mongodb kullanarak ağaç düğümlerini de şu şekilde oluşturdum.

{ "_id" : 0, "sıra" : 10000000, "derinlik" : 0, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.040+0000" }, "soruno" : 1, "üst" : null, "içerik" : "kök" }
{ "_id" : 1, "sıra" : 1000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.057+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu ilk yanıtdır" }
{ "_id" : 2, "sıra" : 2000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.062+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu ikinci yanıtdır" }
{ "_id" : 3, "sıra" : 3000000, "derinlik" : 1, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.067+0000" }, "soruno" : 1, "üst" : 0, "içerik" : "Bu üçüncü yanıtdır" }
{ "_id" : 4, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.072+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Dördüncü yanıt" }
{ "_id" : 5, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.085+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Beşinci yanıt" }
{ "_id" : 6, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.099+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Altıncı yanıt" }
{ "_id" : 7, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.113+0000" }, "soruno" : 1, "üst" : 1, "içerik" : "Yedinci yanıt" }
{ "_id" : 8, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.126+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Sekizinci yanıt" }
{ "_id" : 9, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.140+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Dokuzuncu yanıt" }
{ "_id" : 10, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.153+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Onuncu yanıt" }
{ "_id" : 11, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.167+0000" }, "soruno" : 1, "üst" : 2, "içerik" : "Onbirinci yanıt" }
{ "_id" : 12, "sıra" : 100000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.183+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onikinci yanıt" }
{ "_id" : 13, "sıra" : 200000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.218+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onüçüncü yanıt" }
{ "_id" : 14, "sıra" : 300000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.237+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Ondördüncü yanıt" }
{ "_id" : 15, "sıra" : 400000, "derinlik" : 2, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.249+0000" }, "soruno" : 1, "üst" : 3, "içerik" : "Onbeşinci yanıt" }
{ "_id" : 16, "sıra" : 10000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.261+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onaltıncı yanıt" }
{ "_id" : 17, "sıra" : 20000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.275+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onyedinci yanıt" }
{ "_id" : 18, "sıra" : 30000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.289+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Onsekizinci yanıt" }
{ "_id" : 19, "sıra" : 40000, "derinlik" : 3, "oluşturmazamanı" : { "$date" : "2017-11-01T19:23:09.303+0000" }, "soruno" : 1, "üst" : 12, "içerik" : "Ondokuzuncu yanıt" }

Dikkat ederseniz derinlik azaldıkça 10^7 den başlamak üzere azalarak bir katsayıyla çarpılıyor. Bu sıralamayı bulabilmek için de sıra numarası en küçük olan elemanı çıkartacak bir öncelikli kuyruk (https://dbader.org/blog/priority-queues-in-python) kullandım.

İlginç bir şekilde bu da daha önce konuştuğumuz 8 bilmece (http://ddili.org/forum/thread/1579) probleminin çözümüyle aynı (ya da çok benzer) yöntemi kullanıyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 01, 2017

Sanırım zamanında Basic dilinde satırları onar onar numaralandırdığımıza benzer biçimde, düğümlerin aralıklı olarak numaralandırılmalarından bahsediyorlar. Öyle yaparsak düğümleri kaydırmak için yerimiz oluyor. Örneğin, bir düğümü 10 ile 20 düğümleri arasına kaydırmak için (10+20)/2==15 buluyoruz.

Bunun dışında bir şey anlamıyorum. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]