【问题标题】:Mongodb schema structure - push and popMongodb模式结构-push和pop
【发布时间】:2011-06-20 03:41:40
【问题描述】:

我想要一个类似于以下架构的集合:

name1:
 - guid1 : [{ foo1}, {foo2}, .. {foo n}]
 - guid2 : [{ foo1}, {foo2}, .. {foo n}]

(1) 每个foo 对象都是具有相同内部结构的字典 - 所以理想情况下我会在guid 下面有一个字典,我可以在其中附加额外的数据 - 但这似乎是不可能的(或者是吗?)

(2) 我正在为能够pop 数据而苦苦挣扎-我不确定如何将查询构造为仅pop 单个guid 关闭name1

如果相关,我正在使用 pymongo。

【问题讨论】:

  • “流行”是什么意思?如果它是 mongo 的 $pop 那么它是删除数组的第一个/最后一个元素并且你有对象(字典)的操作。
  • ive 刚刚意识到 $pop 工作正常(对我的代码进行了一些小的调整),但我希望 pop 能够返回删除的值,但它没有按照设计...

标签: javascript python json mongodb


【解决方案1】:

不要随便乱扔扳手,但是您是否考虑过使用MongoEngine?它位于 pymongo 之上,让使用 mongoDB 成为一种乐趣。看看吧。

所以你的 mongoengine 声明看起来像这样:

from mongoengine import *                           

class Foo(EmbeddedDocument):                  
    #Declare your Foo properties here

class Guid(EmbeddedDocument):                  
    name = StringField()                 
    foos = ListField(EmbeddedDocumentField(Foo))                                    

class Name(Document):                          
    title = StringField(required=True)                                       
    guids = ListField(EmbeddedDocumentField(Guid))

然后您可以获取您的 Name 并将其属性作为不错的对象循环,删除并弹出 Guid,然后键入 Name.save()

【讨论】:

  • 我认为我必须从根本上改变我构建数据的方式 - 谢谢这看起来很有趣
  • 是的,我根据你的问题尝试了一下。如果您需要更多帮助,请告诉我。
  • 如果 foo1 是 guid1 和 guid2 中的同一个对象,则将 Foo 改为实现 Document,并将 foos 行改为: foos = ListField(ReferenceField(Foo))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2017-09-12
  • 2022-01-17
  • 2016-08-16
  • 2018-04-17
  • 1970-01-01
  • 2013-02-20
相关资源
最近更新 更多