小编RaR*_*RaR的帖子

对MongoDB中的集合进行递归搜索

我在MongoDB中有一个带有树结构的文档列表,其中使用了带有父引用模型的模型树结构.我想要一个聚合查询,它返回祖先列表(直到根),给定'name'属性.

结构体:

{
  '_id': '1',
  'name': 'A',
  'parent': '',
},
{
  '_id': '2',
  'name': 'B',
  'parent': 'A',
},
{
  '_id': '3',
  'name': 'C',
  'parent': 'B',
},
{
  '_id': '4',
  'name': 'D',
  'parent': 'C',
}
Run Code Online (Sandbox Code Playgroud)

聚合结果:(给定,名称='D')

{
  '_id': '4',
  'name': 'D',
  'ancestors': [{name:'C'}, {name:'B'}, {name:'A'}]
}
Run Code Online (Sandbox Code Playgroud)

Note:我现在无法更改文档结构.这会造成很多问题.我看到许多解决方案建议将模型树结构与祖先数组一起使用.但我现在不能用它.有没有办法用上面的模式使用单个聚合查询来实现它?谢谢

tree-structure mongodb aggregation-framework

13
推荐指数
1
解决办法
7622
查看次数

更新多个文档并返回所有更新的文档

我正在寻找一种方法来一次更新许多文档使用mongoose并返回所有修改过的文档.我试着multi:trueupdate()中设置.它正在更新所有匹配的文档但不返回任何文档.然后我尝试使用findOneAndUpdate().即使有许多匹配的文档,它也只更新并返回一个文档.是的,函数名称本身告诉,它只会更新一个,我仍然尝试过.我不能像设置选项multi:truefindOneAndUpdate().怎么做到呢?提前致谢

mongoose mongodb node.js

8
推荐指数
1
解决办法
4418
查看次数

process.nextTick 和 queueMicrotask 的区别

Node 11.0.0 添加queueMicrotasks为实验性的。该文档说它类似于process.nextTick但队列由 V8 而不是 Node.js 管理。要使用的用例queueMicrotasksprocess.nextTick什么?使用一个比另一个会有任何性能提升吗?

node.js

7
推荐指数
1
解决办法
2300
查看次数

如何按条件从输出中删除不需要的字段

我有一个投影阶段如下,

{
  'name': {$ifNull: [ '$invName', {} ]},,
  'info.type': {$ifNull: [ '$invType', {} ]},
  'info.qty': {$ifNull: [ '$invQty', {} ]},
  'info.detailed.desc': {$ifNull: [ '$invDesc', {} ]}
}
Run Code Online (Sandbox Code Playgroud)

{}如果字段不存在,我将投影空对象(),因为如果在字段中执行排序并且该字段不存在,则该文档排序顺序在第一位(将没有现有字段的文档排序到结果结尾) . 下一阶段是排序,并希望不存在的字段按排序顺序排在最后。这按预期工作。

现在,我想删除其具有空的对象作为值(如果这些字段info.detailed.desc是空的info.detailed在输出不应该在那里)。我可以lodash像这样在节点级别执行此操作(/sf/answers/2679518201/)。但我试图在 mongodb 级别执行此操作。是否可以?我试过$redact,但它正在过滤掉整个文档。是可能PRUNEDESCEND基于价值文档的领域?

javascript mongodb node.js aggregation-framework

3
推荐指数
1
解决办法
3729
查看次数

如何将对象的值作为数组,给定键列表?

我的对象如下,

obj = {
  '1': {val: 1},
  '2': {val: 2},
  '3': {val: 3},
  '4': {val: 4},
  ...
}
Run Code Online (Sandbox Code Playgroud)

给定键列表(作为Array),我想获得所有值列表(作为Array).

例如,

如果键列表是['3', '4'],输出将是[{val: 3}, {val: 4}]

我尝试如下

_.values(_.pick(obj, ['3', '4']))
Run Code Online (Sandbox Code Playgroud)

这可以工作,但它会进行两次迭代.有没有办法在一次迭代中实现相同的目标.提前致谢.

javascript performance underscore.js lodash

1
推荐指数
1
解决办法
75
查看次数

jsonSchema 嵌套属性有条件需要

在jsonschema中,我们如何根据外部存在的字段值来制作所需的一些内部属性。

在下面的示例中,

{
  "type" : "a/b/c",
  "args": {
    "propA1": "",
    "propA2": "",
    "propB1": "",
    "propC1": "",
    "propC2": "",
    "c1": "",
    "c2": "",
    "c3": ""
  }
}
Run Code Online (Sandbox Code Playgroud)

type可以是abcargs总是需要的。

条件是,

  • propA1,propA2如果类型为a,则为必填项
  • propB1如果类型为band,则为必填项,
  • propC1如果类型为,则propC2需要c, 。

c1c2并且c3始终需要

到目前为止我所做的是,

"properties": {
  "type": {"enum": ["a", "b", "c"]},
  "args": {
    "type": "object",
    "properties": {
      "propA1": {"type":"string" },
      "propA2": {"type":"string" }, …
Run Code Online (Sandbox Code Playgroud)

jsonschema

1
推荐指数
1
解决办法
965
查看次数

带有Hibernate JPA的Spring - EntityManager是关闭异常

EntityManagerFactory(injected)每次需要访问db 时都用来创建entityManager.我有以下代码抛出,

org.springframework.dao.InvalidDataAccessApiUsageException: EntityManager is closed

entityManager = entityManagerFactory.createEntityManager();

List<Object> list = entityManager.createQuery("FROM Class").getResultList();

entityManager.close();

return list.toArray(new Object[list.size()]);
Run Code Online (Sandbox Code Playgroud)

我正在创建一个EntityManager,查询db以获得一些结果,关闭EntityManager并将结果返回给想要这些结果的人.我想我可以弄清楚什么是错的.getResultList()管理的返回对象.因此,在关闭EntityManager导致错误之后尝试访问它们(好吧,我想......).entityManager.clear()关闭之前我试过了.我得到了同样的错误.我尝试entityManager.detach(obj)在关闭它之前从列表()中分离每个对象.不过,我得到了同样的错误.我尝试使用@Transactional(readOnly=true)该方法进行注释.没用

我不会修改对象.我只需要它们在UI上显示.你能给我一个解决方案吗?我正在使用Spring启动+ hibernate JPA + AngularJS + Postgresql.

(PS:我不能让entityManager打开.把它打开,我的连接限制超出了错误.这也不是最好的方法)

java spring hibernate jpa spring-boot

0
推荐指数
1
解决办法
5449
查看次数