Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript key()从集合中返回MongoDB对象上的意外键_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript key()从集合中返回MongoDB对象上的意外键

Javascript key()从集合中返回MongoDB对象上的意外键,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,处理一个奇怪的问题。这是一个从mongodb提取并传递到以下函数的对象数组 我在从数据库提取的数组上的forEach中按顺序尝试了以下3个日志: e(数组中的对象元素),该元素正确返回。如您所见,所有属性(键)都存在: console.log(Object.keys(e))返回的东西不是键 最后: 返回绝对混乱的数据,其中一部分包含对象的实际键: __parentArray __parent __index $__ isNew errors _doc $init id _id hot

处理一个奇怪的问题。这是一个从mongodb提取并传递到以下函数的对象数组

我在从数据库提取的数组上的
forEach
中按顺序尝试了以下3个日志:

  • e
    (数组中的对象元素),该元素正确返回。如您所见,所有属性(键)都存在:
  • console.log(Object.keys(e))
    返回的东西不是键
  • 最后:
返回绝对混乱的数据,其中一部分包含对象的实际键:

__parentArray
__parent
__index
$__
isNew
errors
_doc
$init
id
_id
hotelWebsite
hotelAddress
hotelNumber
hotelName
courseCost
courseDate
courseState
courseCity
courseName
paid
studentComments
studentEmail
studentPhone
studentCountry
studentZip
studentState
studentCity
studentAddress
studentCompany
studentName
schema
constructor
$__original_remove
remove
_pres
_posts
$__original_validate
validate
toBSON
markModified
populate
save
update
inspect
invalidate
$markValid
$isValid
ownerDocument
$__fullPath
parent
parentArray
on
once
emit
listeners
removeListener
setMaxListeners
removeAllListeners
addListener
$__buildDoc
init
$hook
$pre
$post
removePre
removePost
_lazySetupHooks
set
$__shouldModify
$__set
getValue
setValue
get
$__path
unmarkModified
$ignore
modifiedPaths
isModified
$isDefault
isDirectModified
isInit
isSelected
isDirectSelected
$__validate
validateSync
$__reset
$__dirty
$__setSchema
$__getArrayPathsToValidate
$__getAllSubdocs
$__handleReject
$toObject
toObject
toJSON
toString
equals
execPopulate
populated
depopulate
以及相关的代码样本(如果需要):

studentsArray.forEach( (e, i) => {

        if(task === 'nameTag'){
            console.log(e);
            console.log(Object.keys(e));
            for(k in e){
                console.log(k);
            }
        }
....
我需要访问属性(键),以便在
forEach
函数中进行进一步处理。我对造成这种情况的原因感到非常困惑,以前从未遇到过这种问题。对于记录,对象存在,使用
console.log(typeof e)
它是一个对象(不是数据“字符串”)。我可以使用点或括号符号访问属性,但不能使用
Object.keys()
for(obj中的键)

有人能帮我把这件事弄清楚吗

迭代所有可枚举属性,包括自有属性和继承属性。这不是“一个奇怪的错误”,这实际上是预期的行为

至于
Object.keys()
,除非它被不兼容的实现覆盖,否则这些实际上是对象本身的可枚举键,所以您很可能弄错了。
e
对象在其原型中有一个方法,当您执行
console.log(e)
时,该方法会被隐式调用,因此这可能就是您在那里看到的输出,并且不可能反映与原始对象完全相同的属性键。尝试调用
console.log(e.toJSON())
,我猜它的输出将与第一个相同

如果只需要对象自己的属性,请使用


如果希望在第一次输出中打印键,请使用
Object.keys(e.toJSON())

Object.keys
记录对象的键。它就是这样做的。它“不起作用”的唯一方式是如果其他东西覆盖了本机实现。你包括任何polyfill库吗?我就是这么想的。我以前使用过Object.keys(),效果很好。我甚至不知道polyfill库是什么,所以我想我的答案是否定的,除非它自动包含在节点中。这是一个节点应用程序,查询数据库,然后对数据执行操作。啊,好的,我想我现在明白了。问题实际上是console.log
没有标准化。当您记录对象时,
console.log
的节点版本可能会截断它认为相关的键。
Object.keys
的输出实际上是该对象的键的真实列表。如果你编辑这个问题,我会删除DV:),但这不是因为我不能对密钥做任何事情。我的目标是获取键,修改键名并将它们分配给以前的键值,然后将其传递到其他一些函数中。但是它失败了,因为它无法访问keysi need keyName+i,其中“i”是数组中元素的索引。所以我的目标是:获取当前的键对象。键(E)修改它们[EKE+II] = E[KE]删除旧的键,删除E[KEY],然后执行ActoNi不考虑对<代码>的隐式调用。tojSon()/<代码>必须是奇数。该方法用于将对象预处理为适合序列化的格式,因此很有意义。我以前从未使用过object.keys(obj.toJSON())我总是能够只使用object.keys(obj)。我仍然不明白为什么会是这样,但我会接受它是有效的。例如
JSON.stringify()
在序列化过程中将对象的
.toJSON()
视为替换函数。谢谢您提供的信息。这在记录密钥方面是有效的,但它不允许我对密钥做任何事情。当我尝试更新密钥时,什么都没有发生。我放弃了,伙计。问题不在于Object.keys(),而在于Mongoose返回的对象的格式。看见
for(key in e){
    console.log(key);
}
__parentArray
__parent
__index
$__
isNew
errors
_doc
$init
id
_id
hotelWebsite
hotelAddress
hotelNumber
hotelName
courseCost
courseDate
courseState
courseCity
courseName
paid
studentComments
studentEmail
studentPhone
studentCountry
studentZip
studentState
studentCity
studentAddress
studentCompany
studentName
schema
constructor
$__original_remove
remove
_pres
_posts
$__original_validate
validate
toBSON
markModified
populate
save
update
inspect
invalidate
$markValid
$isValid
ownerDocument
$__fullPath
parent
parentArray
on
once
emit
listeners
removeListener
setMaxListeners
removeAllListeners
addListener
$__buildDoc
init
$hook
$pre
$post
removePre
removePost
_lazySetupHooks
set
$__shouldModify
$__set
getValue
setValue
get
$__path
unmarkModified
$ignore
modifiedPaths
isModified
$isDefault
isDirectModified
isInit
isSelected
isDirectSelected
$__validate
validateSync
$__reset
$__dirty
$__setSchema
$__getArrayPathsToValidate
$__getAllSubdocs
$__handleReject
$toObject
toObject
toJSON
toString
equals
execPopulate
populated
depopulate
studentsArray.forEach( (e, i) => {

        if(task === 'nameTag'){
            console.log(e);
            console.log(Object.keys(e));
            for(k in e){
                console.log(k);
            }
        }
....