我有以下Mongoose模式和代码:
模式:
{
...
inv: {
type: Object,
default: {}
},
...
}
代码(版本1),其中targetData
是猫鼬Document
,item
是String
,而amount
是Number
:
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) delete targetData.inv[item];
await targetData.save();
代码(版本2):
targetData.inv[item] = targetData.inv[item] - amount;
if (!targetData.inv[item]) targetData.inv[item] = undefined;
await targetData.save();
问题在于这些尝试均未从文档中删除targetData.inv[item]
。我的目标是从子文档中删除一个项目,例如"thing"
。例如:
之前:
{
...
inv: {
thing: 5
},
...
}
之后:
{
...
inv: {},
...
}
注意:当amount
小于5
(在上面的示例中)时,代码可以正常工作。如果我要删除所有的5
,那时候它不会更新,它将保持为5
。
注意2:我使用的是Mongoose 5.3.15
我该如何实现?
编辑:看起来只有inv
只有1个属性时才会发生。拥有inv: { thing: 5, anotherThing: 6 }
之类的东西可以与delete
关键字完美搭配。
答案 0 :(得分:1)
找出问题所在。我需要做的就是手动告诉Mongoose使用targetData.markModified("inv")
修改了library(pheatmap)
library(dplyr)
data = data.frame(matrix(runif(10*10), ncol=10))
data$sample = rep(c("tumour", "normal"), 5)
data$subject.ID = paste('Subject', 1:10)
data = data %>% arrange(sample)
# for row annotation
my_sample_col = data %>% select(sample)
rownames(my_sample_col) = data$subject.ID
# data matrix
mat = as.matrix(data %>% select(-sample, -subject.ID))
rownames(mat) = data$subject.ID
pheatmap(mat,
scale='row',
annotation_row = my_sample_col,
annotation_names_row=F,
cluster_rows = FALSE,
cluster_cols = FALSE,
show_colnames = FALSE,
show_rownames = FALSE)
。 Docs。这是由于SchemaType为Mixed (Object
)
答案 1 :(得分:0)
我知道您已经解决了问题,但是我有个主意。 通常在这种情况下,我想获取文档并遍历该对象并找到该项目并将其删除并再次保存该文档。这是我的一种幼稚方式。