我有一个要求,我的comments架构如下所示
{
"_id": 1,
"comments": [
{ "userId": "123", "comment": "nice" },
{ "userId": "124", "comment": "super"}
]
}
Run Code Online (Sandbox Code Playgroud)
我想根据实际情况选择要素userId。我正在执行以下查询
comments.update({},{$pull:{comments:{userId:"123"}}})
Run Code Online (Sandbox Code Playgroud)
我的要求是,如果在pull操作符之后数组长度变为零,则由于某种原因我需要删除整个文档。是否可以在单个查询中完成此操作?
PS:我使用的是mongodb驱动程序,不是猫鼬
在技术讨论中,我遇到了如何跨节点维护单个实例的问题,然后我回答了以下方法
1)基于DB的解决方案
2)分布式缓存
3)分片
4)在负载均衡器中维护Singleton单实例
面试官期待更多的东西,因为他回复了数据库,而且Cache会工作,分片无法工作,也没有对负载均衡器方法的评论,然后他补充说,让我们假设你的应用程序中不允许使用DB和Cache方法,给我另一个选择我在这一点上被困住了.
然后我用Google搜索并找到以下内容
https://javaarchitectforum.com/2013/02/19/singleton-design-pattern-with-example/
还从应用程序服务器中找到了一些支持
http://www.onjava.com/pub/a/onjava/2003/08/20/jboss_clustering.html
http://docs.oracle.com/cd/E12840_01/wls/docs103/cluster/service_migration.html#wp1051458
请帮助我解决您的想法,这将是跨节点实现单个实例(单例)的最佳方法
目前,我正在使用MongoCollection<Document>获取所有文档,返回类型为FindIterable<Document>,然后循环遍历 Iterable 来处理每个文档。
前任:
FindIterable<Document> docs = getCollection().find();
for(Document doc : docs) {
...
}
Run Code Online (Sandbox Code Playgroud)
但我不知道 FindIterable 是否会加载所有文档并循环它,或者只是加载游标并稍后在循环时获取文档?
我在Windows 10上安装了mongodb,并且它始终在Windows启动时在后台运行,这很烦我,因为我不需要一直使用它,因此如何停止启动时运行它呢?真正删除mongodb的唯一方法?
我试过了,mongo admin --eval "db.shutdownServer()" 但是只会关闭它,但是重启后mongodb将在后台再次出现:(